Push-контент при нажатии в редактировать текст

Я искал везде решение моей проблемы, но не могу найти ответ. Здесь проблема.

У меня есть макет, который выглядит так

Теперь, когда я нажимаю на текст редактирования (панель поиска), я хочу, чтобы произошло следующее

Программная клавиатура в основном должна выдвигать содержимое всего экрана так, чтобы панель поиска находилась вверху, а ее список отображался под ней, чтобы при поиске содержимого отображались результаты. Я пробовал настройку android:windowSoftInputMode="adjustPan" к Activity в манифесте, но это не сработало. Я установил вид прокрутки в качестве основного контейнера в основном макете, который содержит фрагменты, но также не работает. Я попытался добавить текст редактирования (панель поиска) в качестве заголовка к представлению списка, но это также не сработало. Каждый раз, когда клавиатура нажимала на редактируемый текст, но закрывала вид списка. Есть ли способ сделать эту работу?

10 ответов

Решение

На самом деле, если вы хотите, чтобы весь макет работал, чем вы должны использовать:

SOFT_INPUT_ADJUST_PAN

имея в виду:

getActivity().getWindow().setSoftInputMode(
                WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

это будет держать клавиатуру закрытой, а когда она открыта, это подтолкнет всю вашу активность вверх.

Это можно использовать в классе фрагментов для перемещения текста редактирования вверх и прокрутки до конца.

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

Это будет работать наверняка, если ваша тема деятельности фрагмента не в FullScreen.

Надеюсь, это поможет!

Я столкнулся с подобной проблемой, решение было простым.

Если тема в упражнении установлена ​​как полноэкранная @android:style/Theme.Holo.NoActionBar.FullScreenклавиатура не подталкивала содержимое вверх.

После того, как я изменил активность на @android:style/Theme.Holo.NoActionBarклавиатура теперь подталкивает содержимое активности вверх.

Это сработало для меня.

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

Попробуй это

android:windowSoftInputMode="adjustResize"

Работаю на меня.

Пытаться android:windowSoftInputMode="adjustResize" в вашем файле манифеста.

Возможно, вам нужно сделать android:windowSoftInputMode="adjustResize|adjustPan"... У меня нет ничего похожего на вашу установку для тестирования...

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

Главное окно действия не изменено, чтобы освободить место для виртуальной клавиатуры. Скорее, содержимое окна автоматически панорамируется, так что текущий фокус никогда не скрывается клавиатурой, и пользователи всегда могут видеть, что они печатают.

Учитывая это, ваш список затемняется, потому что текст EditText вверху имеет фокус. Единственное, о чем я сейчас могу думать, это переместить EditText, чтобы он находился ниже списка. Затем, когда вы нажмете вверх, ваш список все еще должен быть виден над EditText.

Это работает для меня, для фрагмента, просто объявите это в манифесте с деятельностью:

android:windowSoftInputMode="adjustPan"

Удачи!

Я не мог найти решение для автоматического изменения макета, поэтому мне пришлось взломать его. Я использовал код, который нашел здесь в своей основной деятельности, чтобы определить, когда клавиатура открыта. Я просто добавил код для вызова метода, который скрывает два моих верхних фрагмента при открытой клавиатуре. Это не совсем то, что я хотел сделать, но это работает.

Я использую это для моего EditText авторизоваться:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

Некоторые заметки об этом методе:

this ссылается на контекст, как getActivity() не всегда предпочтительнее

.SOFT_INPUT_STATE_HIDDEN  //for default hidden state when activity loads

.SOFT_INPUT_STATE_VISIBLE //for auto open keyboard when activity loads 

Работает каждый раз!

Если кто-то все еще сталкивается с этой проблемой:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:id="@+id/view"
    android:fitsSystemWindows="true"
    android:layout_height="match_parent">

добавьте в свой макет:

android:fitsSystemWindows="true"

Я надеюсь, что это решит вашу проблему - это сработало для меня.

В kotlin: - Добавьте эту строку в свою Activity on Create и In Fragment onCreateView Method

activity!!.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
Другие вопросы по тегам