mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 20:11:24 +08:00

* enable recycling of nativeView * backgroundInternal is reset if setting new value leads to background.isEmpty() == true. * android background.getDefault always return copy of the background. Now all controls that mutate the background can be reset to initial state (e.g. Button & ActionBar) passing resources to copied background so it respect density. fix properties initNativeView * reset padding when backgroundInternal is reset. * Fix text reset Fix padding reset * fix tsc errors * fix ugly text rendering. * Add unit tests for recycling native views Fix several issues that came from the above tests Fix maxLength property missing a converter callback Remove old files * Remove old files * Revert backgroundInternal setter * change the order of tests so that appium can work again * Remove suggestion on every TextView & TextField init (strangely it is enabled after view is recycled....) * Fix function to get parent layout if specified * Button stateListAnimator restored when button is recycled zIndex defaultValue is now undefined instead of NaN * revert zIndex.setNative to always clear stateListAnimator because it was breaking one UI test (setting value=0 was returning the previous stateListAnimator) * fix search-bar backgound-color recycling * Fix alignments setters * Fix imageView recycling Fix button recycling Fix edit-text recycling resetNativeView is called only if recycleNativeView flag is true * Fix incorrect merge * Fix text-view & text-field textTransform * Fix EditText text reset * Fix runtime crash on ARM emulator API 21 * Fix text-base minHeight. maxHeight reset Fix reset of isUserInteractionEnabled
87 lines
3.9 KiB
TypeScript
87 lines
3.9 KiB
TypeScript
import { TextFieldBase, secureProperty, whiteSpaceProperty, WhiteSpace } from "./text-field-common";
|
|
|
|
export * from "./text-field-common";
|
|
|
|
export class TextField extends TextFieldBase {
|
|
public _configureEditText(editText: android.widget.EditText) {
|
|
editText.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_NORMAL | android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | android.text.InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
|
|
editText.setLines(1);
|
|
editText.setMaxLines(1);
|
|
editText.setHorizontallyScrolling(true);
|
|
}
|
|
|
|
public _onReturnPress() {
|
|
this.notify({ eventName: TextField.returnPressEvent, object: this })
|
|
}
|
|
|
|
[secureProperty.setNative](value: boolean) {
|
|
let inputType: number;
|
|
|
|
// Password variations are supported only for Text and Number classes.
|
|
if (value) {
|
|
if (this.keyboardType === "number") {
|
|
inputType = android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_NUMBER_VARIATION_PASSWORD;
|
|
} else {
|
|
inputType = android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_PASSWORD;
|
|
}
|
|
} else {
|
|
// default
|
|
inputType = android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_NORMAL;
|
|
|
|
// add autocorrect flags
|
|
if (this.autocorrect) {
|
|
inputType = inputType | android.text.InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE;
|
|
inputType = inputType | android.text.InputType.TYPE_TEXT_FLAG_AUTO_CORRECT;
|
|
inputType = inputType & ~android.text.InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
|
|
}
|
|
|
|
// add autocapitalization type
|
|
switch (this.autocapitalizationType) {
|
|
case "words":
|
|
inputType = inputType | android.text.InputType.TYPE_TEXT_FLAG_CAP_WORDS; //8192 (0x00020000) 14th bit
|
|
break;
|
|
case "sentences":
|
|
inputType = inputType | android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES; //16384(0x00040000) 15th bit
|
|
break;
|
|
case "allcharacters":
|
|
inputType = inputType | android.text.InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS; //4096 (0x00010000) 13th bit
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
// add keyboardType flags.
|
|
// They override previous if set.
|
|
switch (this.keyboardType) {
|
|
case "datetime":
|
|
inputType = android.text.InputType.TYPE_CLASS_DATETIME | android.text.InputType.TYPE_DATETIME_VARIATION_NORMAL;
|
|
break;
|
|
case "phone":
|
|
inputType = android.text.InputType.TYPE_CLASS_PHONE;
|
|
break;
|
|
case "number":
|
|
inputType = android.text.InputType.TYPE_CLASS_NUMBER | android.text.InputType.TYPE_NUMBER_VARIATION_NORMAL | android.text.InputType.TYPE_NUMBER_FLAG_SIGNED | android.text.InputType.TYPE_NUMBER_FLAG_DECIMAL;
|
|
break;
|
|
case "url":
|
|
inputType = android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_URI;
|
|
break;
|
|
case "email":
|
|
inputType = android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
this._setInputType(inputType);
|
|
}
|
|
|
|
[whiteSpaceProperty.getDefault](): WhiteSpace {
|
|
return "nowrap";
|
|
}
|
|
[whiteSpaceProperty.setNative](value: WhiteSpace) {
|
|
// Don't change it otherwise TextField will go to multiline mode.
|
|
}
|
|
}
|
|
|
|
TextField.prototype._isSingleLine = true; |