2010-07-21 6 views

ответ

147

Вы спрашиваете, как контролировать то, что видно, когда открывается мягкая клавиатура? Возможно, вы захотите сыграть с windowSoftInputMode. См. developer docs для более подробного обсуждения.

+0

Лучший ответ, +1 для информации – VenomVendor

+2

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

+0

Не работает в пейзажном режиме? :( – usman

3

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

+0

Что я думаю, мне нужно, чтобы сделать окно «искусственно» дольше, чтобы можно было прокручивать представление. В настоящее время RelativeLayout настроен на android: layout_width = "wrap_content" android: layout_height = "wrap_content" – Alexis

+0

Тогда я не знаю решения. Возможно, вам захочется вручную настроить значения ширины и высоты в соответствии с вашими потребностями, растянув их дальше до того, что разрешает «wrap_content». –

25

Почему бы не попробовать добавить ScrollView, чтобы обернуть все, что вы хотите прокрутить. Вот как я это сделал, где я фактически оставляю заголовок сверху, который не прокручивается, а виджеты диалогового окна (в частности, EditTexts) прокручиваются при открытии программной клавиатуры.

<LinearLayout android:id="@+id/HeaderLayout" > 
    <!-- Here add a header or whatever will not be scrolled. --> 
</LinearLayout> 
<ScrollView android:id="@+id/MainForm" > 
    <!-- Here add your edittexts or whatever will scroll. --> 
</ScrollView> 

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

+4

Хотя ответ Майры - это то, что каждый * должен * делать (и, вероятно, то, что Google думал, что все должны делать), это то, что я делаю почти каждый раз. единственный способ получить реальный контроль, необходимый для правильного отображения. Вздох. –

+0

@zmilojko спасибо –

+0

не стоит недооценивать комментарий Скотта. Это правда. в моем случае я не хотел изменять размер или панорамировать свой список, но хотел бы взять editText в конце этого списка. Итак, я поместил editText в scrollView и работает так, как ожидалось. – Darpan

45

У меня была такая же проблема, когда экранная клавиатура была поверх представлений EditText, которые были помещены в нижней части экрана. Я смог найти решение, добавив одну строку в соответствующую активность моего AndroidManifest.xml.

android:windowSoftInputMode="adjustResize|stateHidden" 

Это как вся деятельность тег выглядит следующим образом:

<activity 
     android:name="com.my.MainActivity" 
     android:screenOrientation="portrait" 
     android:label="@string/title_activity_main" 
     android:windowSoftInputMode="adjustResize|stateHidden" > 
    </activity> 

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

+0

Но это может испортить внешний вид вашего html, если ваш css имеет в основном процентные значения –

+0

Вы угадываете здесь или вы его попробовали? Кстати, это не должно испортить ваш html. Я пробовал с веб-просмотров. Это будет смещать весь взгляд не на отдельные элементы. – DanKodi

+1

Я попробовал. Я думаю, что это происходит потому, что мой css имеет в основном процентные значения –

128

У меня были такие же проблемы. Попробуйте использовать следующий код:

android:windowSoftInputMode="adjustPan" 

Добавьте его в свой манифест.xml в теге деятельности, в котором хранится ввод. Пример:

<activity 
      android:name=".Activities.InputsActivity" 
      ... 
      android:windowSoftInputMode="adjustPan" 
      /> 
+11

Простейший ответ! Также как примечание, это необходимо добавить в файл манифеста и под требуемую деятельность. – NRR

+4

В моем случае это, по крайней мере, не испортит мой html, поскольку 'adjustResize' будет делать, но он также охватывает мои поля ввода –

+5

Это не помогло мне – vikifor

10

Извините за возрождение старой нити, но никто не упомянул установки android:imeOptions="flagNoFullscreen" в вашем элементе EditText

13

Все, что вам нужно сделать, это

android:isScrollContainer="true" 

Источник: http://www.davidwparker.com/2011/08/25/android-fixing-window-resize-and-scrolling/

+1

Хотя сам ответ мне не помог (атрибут не нужен), связанный источник содержит полное объяснение (форма должна быть встроена в ScrollView). Благодаря! – johndodo

+0

Ссылка полезная. Спасибо –

+0

Аналогично, ничего на странице не помогло мне, но ссылка показала добавление adjustResize к активности windosSoftInputMode, и это сработало. –

5
android:windowSoftInputMode="adjustPan" 
android:isScrollContainer="true" 

работает для android EditText, пока он не работает для веб-просмотра или x walkview. Когда мягкая клавиатура скрывает вход в webview или xwalkview, вы используете android:windowSoftInputMode="adjustResize"

+0

Спасибо за ваш ответ. Его работа для меня. –