то, что я делаю, звучит очень просто. Измените размер моего GridView
, когда SoftKeyboard
открыт. Поместите его обратно на место (размер размера), где он принадлежит, если исчезает SoftKeyboard
.OnGlobalLayoutListener постоянно срабатывает, если видна SoftKeyboard.
Для этого я сделал следующее:
root.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// TODO Auto-generated method stub
if(gv != null && searchbar != null) {
root.getWindowVisibleDisplayFrame(r);
if(screenHeight > r.bottom) {
RelativeLayout.LayoutParams myLayoutParams = (android.widget.RelativeLayout.LayoutParams) gv.getLayoutParams();
myLayoutParams.removeRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
gv.setLayoutParams(myLayoutParams);
int gvHeight = screenHeight - r.bottom - searchbar.getLayoutParams().height;
gv.getLayoutParams().height = gvHeight;
}else {
RelativeLayout.LayoutParams myLayoutParams = (android.widget.RelativeLayout.LayoutParams) gv.getLayoutParams();
myLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
gv.setLayoutParams(myLayoutParams);
}
}
}
});
Где gv
мой GridView
. Если я запустил свое приложение и нажал на свою панель поиска, появится softkeyboard
, и этот метод все время стреляет. (Даже если макет не меняется или даже я ничего не нажимаю). Поэтому он блокирует мой пользовательский интерфейс. Я сделал что-то не так?
Кроме того, у кого-то есть лучшая идея, реализующая эту функцию. (Изменение размера моей сетки при отображении Softkeyboard и наоборот).
Любая помощь приветствуется.
Уведомление
Работа с onFocusChange
звучит не очень хорошо для меня. Потому что на моем устройстве. Я могу закрыть SoftKeyboard
с backPress
без потери Focus