2012-07-02 2 views
56

Я искал всюду для решения моей проблемы, но не могу найти ответ. Вот проблема.Push up content при нажатии на редактирование текста

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

Image is here

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

Image is here

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

ответ

67

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

SOFT_INPUT_ADJUST_PAN

смысл:

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

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

+2

Ты потрясающий! – Eenvincible

+0

Но макет отжимается при вводе первого символа в поле редактирования. – Nivedh

+4

'adjustpan' работает отлично, но в то же время я также хочу, чтобы мои кнопки внизу располагались над клавиатурой (что в основном достигается с помощью' adjustResize', но затем оно не толкает весь макет вверх, в конечном итоге скрывает текстовое поле, в которое я вхожу данные. Может ли кто-нибудь помочь? – driftking9987

7

Попробуйте android:windowSoftInputMode="adjustResize" в вашем файле манифеста.

Вам может понадобиться сделать android:windowSoftInputMode="adjustResize|adjustPan" ... Я на самом деле не имеют ничего подобного с вашими настройками, чтобы проверить на ...

Ваша проблема еще потому это (от Документами adjustPan, курсив мой) :

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

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

+0

Спасибо за ответ. Я пробовал это, не работал. Повторный размер работает, но он заставляет содержимое сжиматься в верхней части экрана, и это выглядит очень плохо, также содержимое списка не отображается, когда используется параметр adjustResize. – Neil

+0

Обновлен мой ответ, а не реальное решение, но возможное обходное решение. – Barak

+0

Привет, Барак Я попытался переместить EditText под списком, но это не сработало. Я также подумал, что нужно, но он просто нажал EditText поверх списка и спрятал весь контент списка. – Neil

3

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

8

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

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

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

+0

Спасибо, чувак! Но знаете ли вы, как установить его в полноэкранный режим? –

+0

Я также хочу, чтобы полноэкранный и даже рабочий контент не поднимались. Любое решение? – Nikita

19

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

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

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

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

+0

это хорошо работает, но макет отжимается, когда вводится первый символ в поле редактирования. как решить? Пожалуйста, дайте мне знать, если вы знаете – siva

+0

@siva Me также сталкивается с тем же вопросом – Nivedh

+0

Работал! Большое спасибо – dearvivekkumar

10

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

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

Я использую это для моего 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 

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

9

Попробуйте

android:windowSoftInputMode="adjustResize" 

Работа для меня.

3

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

android:windowSoftInputMode="adjustPan" 

удачи!

+0

У меня есть несколько scroolviews и относительных макетов внутри scrollview, где представлены мои edittext. Это определенно работает. Я думал, что мне придется поместить его в каждый редактор, получается, что это так просто, хе-хе. ♥ –

0

Если кто-то до сих пор сталкивается этот вопрос:

<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" 

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

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