Я пишу приложение с Angular 8 и NativeScript 6.
Это связано с этим вопросом здесь: NativeScript - android: windowSoftInputMode = "adjustResize" не вызывает изменение макета событие в примере проекта
Я читал, что нет прямого способа проверить, открыта клавиатура или нет в Android: { ссылка } Поэтому мы должны использовать другие означает проверить, открыт он или нет.
Один из вариантов - проверить высоту представления, чтобы увидеть, не изменилось ли оно: Как проверить видимость программной клавиатуры в Android? Я не знаю, как реализовать это в NativeScript.
Я хочу прослушивать событие, когда клавиатура открывается в моем приложении. Я установил этот параметр в файле AndroidManifest: android:windowSoftInputMode="adjustResize"
Я хочу написать службу angular, которая будет возвращать наблюдаемый логический тип, который я могу использовать, чтобы проверить, открыта и закрыта ли клавиатура. Это должно быть наблюдаемым.
Я исследовал здесь:
https://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalLayoutListener
Я могу прослушивать глобальные изменения макета.
Problem:
Right now my code only returns true when the keyboard opens.
How can I use these events to detect if the keyboard has closed?
Я нашел здесь фрагмент кода:
https://github.com/markhatchell/nativescript-keyboardshowing/blob/master/index.js
Вот мой проект: https://github.com/aubrey-fowler/KeyBoardHelp
Вот моя попытка:
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import * as application from 'tns-core-modules/application';
import { ad } from "utils/utils";
var frame = require('ui/frame');
@Injectable({
providedIn: 'root'
})
export class AndroidKeyboardListenerService {
public watchKeyboard$(): Observable<boolean> {
return new Observable((observer) => {
var current_view = frame.topmost().currentPage.android;
current_view.getViewTreeObserver().addOnGlobalLayoutListener(new android.view.ViewTreeObserver.OnGlobalLayoutListener({
onGlobalLayout: function () {
if (ad.getInputMethodManager().isAcceptingText()) {
console.log(' here ');
observer.next(true);
} else {
console.log(' here 2');
observer.next(false);
}
}
}));
});
}
}