mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-26 20:00:16 +08:00
fix(android): KeyboardType now respects numbers (#9240)
This commit is contained in:

committed by
GitHub

parent
c04e1b59e5
commit
f08fcb17b4
@ -1546,12 +1546,18 @@ export function makeValidator<T>(...values: T[]): (value: any) => value is T {
|
||||
return (value: any): value is T => set.has(value);
|
||||
}
|
||||
|
||||
export function makeParser<T>(isValid: (value: any) => boolean): (value: any) => T {
|
||||
export function makeParser<T>(isValid: (value: any) => boolean, allowNumbers = false): (value: any) => T {
|
||||
return (value) => {
|
||||
const lower = value && value.toLowerCase();
|
||||
if (isValid(lower)) {
|
||||
return lower;
|
||||
} else {
|
||||
if (allowNumbers) {
|
||||
const convNumber = +value;
|
||||
if (!isNaN(convNumber)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
throw new Error('Invalid value: ' + value);
|
||||
}
|
||||
};
|
||||
|
@ -48,12 +48,12 @@ export const placeholderColorProperty = new CssProperty<Style, Color>({
|
||||
});
|
||||
placeholderColorProperty.register(Style);
|
||||
|
||||
const keyboardTypeConverter = makeParser<KeyboardType>(makeValidator<KeyboardType>('datetime', 'phone', 'number', 'url', 'email', 'integer'));
|
||||
const keyboardTypeConverter = makeParser<KeyboardType>(makeValidator<KeyboardType>('datetime', 'phone', 'number', 'url', 'email', 'integer'), true);
|
||||
|
||||
export const keyboardTypeProperty = new Property<EditableTextBase, KeyboardType>({ name: 'keyboardType', valueConverter: keyboardTypeConverter });
|
||||
keyboardTypeProperty.register(EditableTextBase);
|
||||
|
||||
const returnKeyTypeConverter = makeParser<ReturnKeyType>(makeValidator<ReturnKeyType>('done', 'next', 'go', 'search', 'send'));
|
||||
const returnKeyTypeConverter = makeParser<ReturnKeyType>(makeValidator<ReturnKeyType>('done', 'next', 'go', 'search', 'send'), true);
|
||||
|
||||
export const returnKeyTypeProperty = new Property<EditableTextBase, ReturnKeyType>({ name: 'returnKeyType', valueConverter: returnKeyTypeConverter });
|
||||
returnKeyTypeProperty.register(EditableTextBase);
|
||||
@ -68,7 +68,7 @@ editableProperty.register(EditableTextBase);
|
||||
export const updateTextTriggerProperty = new Property<EditableTextBase, UpdateTextTrigger>({ name: 'updateTextTrigger', defaultValue: 'textChanged' });
|
||||
updateTextTriggerProperty.register(EditableTextBase);
|
||||
|
||||
const autocapitalizationTypeConverter = makeParser<AutocapitalizationType>(makeValidator<AutocapitalizationType>('none', 'words', 'sentences', 'allcharacters'));
|
||||
const autocapitalizationTypeConverter = makeParser<AutocapitalizationType>(makeValidator<AutocapitalizationType>('none', 'words', 'sentences', 'allcharacters'), true);
|
||||
|
||||
export const autocapitalizationTypeProperty = new Property<EditableTextBase, AutocapitalizationType>({
|
||||
name: 'autocapitalizationType',
|
||||
|
@ -216,7 +216,7 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
|
||||
const nativeView = this.nativeTextViewProtected;
|
||||
try {
|
||||
this._changeFromCode = true;
|
||||
nativeView.setInputType(inputType);
|
||||
nativeView.setInputType(parseInt(<any>inputType, 10));
|
||||
} finally {
|
||||
this._changeFromCode = false;
|
||||
}
|
||||
@ -281,7 +281,12 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
|
||||
break;
|
||||
|
||||
default:
|
||||
newInputType = value;
|
||||
const inputType = +value;
|
||||
if (!isNaN(inputType)) {
|
||||
newInputType = inputType;
|
||||
} else {
|
||||
newInputType = android.text.InputType.TYPE_CLASS_TEXT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -27,6 +27,13 @@ export class TextField extends TextFieldBase {
|
||||
setSecureAndKeyboardType(): void {
|
||||
let inputType: number;
|
||||
|
||||
// Check for a passed in Number value
|
||||
const value = +this.keyboardType;
|
||||
if (!isNaN(value)) {
|
||||
this._setInputType(value);
|
||||
return;
|
||||
}
|
||||
|
||||
// Password variations are supported only for Text and Number classes.
|
||||
if (this.secure) {
|
||||
if (this.keyboardType === 'number') {
|
||||
|
Reference in New Issue
Block a user