2015-05-01 2 views
2

У меня есть приложение, которое имеет 4 Fragment s (отображается как вкладки), и все они имеют один и тот же раздел Action Bar. Верхняя панель имеет кнопки вкладок, а нижняя панель имеет кнопки действий. Есть один Fragment, который имеет EditText наверху и ListView под ним.
Теперь проблема с клавиатурой в этом Fragment является:adjustResize: попытка не отображать нижнюю панель разделительной панели действий при открытии клавиатуры

, если я использую adjustPan, чтобы сделать клавиатуру покрывают нижнюю планку, то ListView не получает изменен, так что некоторые из его элементов покрываются с помощью клавиатуры и Я не могу прокрутить их;

, если я использую adjustResize, размер ListView действительно изменяется, но нижняя панель, конечно же, раздвигается. Я не хочу этого.

Что мне нужно, так это то, что нижняя панель закрыта клавиатурой. И ListView получает размер, чтобы я мог видеть все его элементы с помощью прокрутки.
В то же время я собираюсь использовать adjustPan и отменить клавиатуру, когда пользователь коснется ListView, но я хотел бы найти способ сделать то, что я объяснил выше.

Неплохо ли пытаться изменить размер ListView при появлении клавиатуры (при использовании adjustPan)? Или есть способ скрыть (с setVisibility(View.GONE) или что-то) в нижней панели при использовании adjustResize? И, наконец, есть ли простой способ понять, когда появляется клавиатура, и получить ее высоту?

Спасибо за помощь.

P.S. Я уже нашел несколько подобных вопросов, и ни одно из них не имеет решения.

ответ

0

Единственное, что я мог придумать, это настроить softInputMethodMode для настройкиResize, а затем показывать или скрывать нижнюю панель, когда клавиатура закрывается и открывается. Несмотря на то, что для прослушивания нет открытых/закрытых событий клавиатуры, вы можете обнаружить их, наблюдая изменения в высоте окна. Вы можете достичь этого на adding a global layout listener на ваш наблюдатель дерева взглядов вашего основного содержимого. Обратитесь к this post за пояснениями и кодом использования наблюдателя дерева представлений.

Редактировать

Вот отрывок, который я скопировал из ссылки выше, с соответствующими изменениями (я не пробовал это, но это выдвигает на первый план идею):

View bottomBar = findViewById(R.id.your_bottom_bar); 
final View activityRootView = findViewById(R.id.activityRoot); 
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight(); 
     if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard... 
      bottomBar.setVisibility(View.GONE); 
     }else{ 
      bottomBar.setVisibility(View.VISIBLE); 
     } 
    } 
}); 
+0

спасибо, я завтра заглянем в него. Кстати, моя нижняя строка не является представлением, которое я определил в XML-файле, но он создан, потому что я использую ActionBar, и я установил 'android: uiOptions =" ​​splitActionBarWhenNarrow "' в элементе основного действия в манифесте приложения. Я не знаю, как получить ссылку только на нижнюю часть, но я рассмотрю ее. – nonzaprej

 Смежные вопросы

  • Нет связанных вопросов^_^