fix android keyboard

This commit is contained in:
Hristo Hristov
2018-01-10 17:45:08 +02:00
parent 3384112ce8
commit 82f081d603

View File

@ -71,10 +71,9 @@ function initializeEditTextListeners(): void {
} }
if (hasFocus) { if (hasFocus) {
owner.clearDismissTimer();
owner.notify({ eventName: EditableTextBase.focusEvent, object: owner }); owner.notify({ eventName: EditableTextBase.focusEvent, object: owner });
owner.focus(); } else {
}
else {
if (owner._dirtyTextAccumulator || owner._dirtyTextAccumulator === "") { if (owner._dirtyTextAccumulator || owner._dirtyTextAccumulator === "") {
textProperty.nativeValueChange(owner, owner._dirtyTextAccumulator); textProperty.nativeValueChange(owner, owner._dirtyTextAccumulator);
owner._dirtyTextAccumulator = undefined; owner._dirtyTextAccumulator = undefined;
@ -130,6 +129,7 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
private _inputType: number; private _inputType: number;
public _changeFromCode: boolean; public _changeFromCode: boolean;
public _dismissId: NodeJS.Timer;
public abstract _configureEditText(editText: android.widget.EditText): void; public abstract _configureEditText(editText: android.widget.EditText): void;
@ -175,17 +175,28 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
} }
const activity = this._context as android.app.Activity; const activity = this._context as android.app.Activity;
setTimeout(() => { if (!this._dismissId) {
const focused = activity.getCurrentFocus(); this._dismissId = setTimeout(() => {
if (!focused this._dismissId = null;
|| focused === nativeView const focused = activity.getCurrentFocus();
|| !(focused instanceof android.widget.EditText)) { if (!focused
ad.dismissSoftInput(nativeView); || focused === nativeView
} || !(focused instanceof android.widget.EditText)) {
}, 100); ad.dismissSoftInput(nativeView);
}
}, 100);
}
}
public clearDismissTimer(): void {
if (this._dismissId) {
clearTimeout(this._dismissId);
this._dismissId = null;
}
} }
public focus(): boolean { public focus(): boolean {
this.clearDismissTimer();
const result = super.focus(); const result = super.focus();
if (result) { if (result) {
ad.showSoftInput(this.nativeViewProtected); ad.showSoftInput(this.nativeViewProtected);