Android отображает представление и скрывает клавиатуру одновременно. Странное поведение
У меня есть пользовательский вид, который может отображать представление в том же пространстве, которое должно быть мягкой клавиатурой для Android.
Мне нужно открыть клавиатуру, нажать кнопку, скрыть клавиатуру и показать другой вид в том же месте, что и клавиатура.
У меня это реализовано прямо сейчас, только с клавиатурой скрыть и показать пользовательский вид, но имеет странное поведение и минимальное отставание и перекрытие.
Кто-то реализовал подобный материал?
Ответы
Ответ 1
Я проверил проект Github и нашел ошибку, и я исправил эту ошибку со следующим кодом:
if (isRedPanelVisible()) {
showRedPanel(false);
showKeyboard(true, new KeyboardCallback() {
@Override
public void onKeyboardDone(boolean isVisible) {
}
});
}
if (KeyboardVisibilityEvent.isKeyboardVisible(TestActivity.this)) {
hideKeyboard(TestActivity.this);
new android.os.Handler().postDelayed(new Runnable() {
@Override
public void run() {
showRedPanel(true);
}
}, 100);
Примечание. Вам просто нужно поместить это в TestActivity.java под событие нажатия кнопки и удалить предыдущий код.
Что я сделал
если ваша readPanel видна, то я вызвал showRedPanel
на false
и попытаюсь открыть клавиатуру.
После этого я добавил чек для события видимости клавиатуры и, если клавиатура видна, я вызвал hideKeyboard
чтобы заставить клавиатуру уйти и вызвать showReadPanel
с true
после задержки 100 мс
Код: hideKeyboard
public void hideKeyboard(Activity activity) {
// Check if no view has focus:
try {
View view = activity.getCurrentFocus();
if (view != null) {
InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
} catch (Exception e) {
}
}
Ответ 2
Итак, что происходит в вашем коде, так это то, что: Скажите системе, чтобы закрыть клавиатуру -> Показать красную панель с небольшой задержкой -> Красная панель отображается до закрытия клавиатуры -> Поскольку режим клавиатуры находится в adjustResize
красную панель, показанную над клавиатурой -> Клавиатура закрыться -> Все на месте
Попытайтесь изменить windowSoftInputMode
в манифесте с помощью adjustResize
чтобы adjustNothing
.
К сожалению, клавиатура в Android не работает плавно, как в IOS, клавиатура обрабатывается ОС, потому что вы не контролируете ее размер, анимацию открытия/закрытия и обратный вызов! Поэтому лучший способ - всегда показывать красную панель и при необходимости открывать клавиатуру поверх нее.
Ответ 3
выполните следующие функции, чтобы показать/скрыть клавиатуру:
/**
* Hides the soft keyboard
*/
public void hideSoftKeyboard() {
if(getCurrentFocus()!=null) {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
}
/**
* Shows the soft keyboard
*/
public void showSoftKeyboard(View view) {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
view.requestFocus();
inputMethodManager.showSoftInput(view, 0);
}