Клавиатура Android покрывает поле EditText


Ответы:


163

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


2
Это работает нормально, но убедитесь, что у вас есть <item name = "android: windowIsFloating"> true </ item> в вашем стиле диалога, если вы используете собственный стиль диалога.
Дмитрий Чистяков

Кажется, что это не работает в ландшафтном режиме (Nexus 7), редактируемый элемент остается скрытым под клавиатурой. Я пробовал разные комбинации windowSoftInputMode. Кажется, я не могу установить windowIsFloating, потому что ActionBar его не поддерживает. Или это также может быть связано с тем, что мой EditText находится внутри элемента представления списка?
Сампо Саррала - codidact.org

Это не будет работать после добавления <item name = "android: windowTranslucentStatus"> true </ item> в мои им. Кто-нибудь исправит это?
Макс

1
@Max Добавьте android:fitsSystemWindows="true"к своему корневому представлению, чтобы решить это.
Дэвид Пассмор

1
Как насчет перетаскивания полной раскладки над клавиатурой, когда доступна софт-клавиатура, независимо от того, что нравится WhatsApp ....
Кару Бенсон Кару

162

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

android:windowSoftInputMode="adjustPan"

добавьте его в файл manifest.xml в теге активности, содержащей входные данные. пример:

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

14
Самый простой ответ! Просто, как примечание, это нужно добавить в файл манифеста и под действием, которое мы хотим.
NRR

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

8
Это мне не помогло
Викифор

1
@vikifor, убедитесь, что вы добавили свой текст редактирования в scrollview. Даже если у вас есть всего 3-4 поля в макете, добавьте все поля в scrollview. Это делает его прокручиваемым, когда открывается виртуальная клавиатура.
Кулдип Сахия

Работает нормально, но всякий раз, когда я касаюсь представления EditText, клавиатура перерисовывается.
Икбал

55

У меня была та же проблема, когда программная клавиша находилась поверх представлений 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. Это сместит весь пользовательский интерфейс вверх, чтобы освободить место для клавиатуры.


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

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

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

@DanKodi Я пытался, adjustResize|stateHiddenи это не имело никакого значения adjustPan.
Игорь Ганапольский

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, но это зависит от вас. Кроме того, установка стиля полосы прокрутки на outsideInset помогает, по крайней мере, на моих устройствах.


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

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

15

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

android:isScrollContainer="true"

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


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

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

14

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


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

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


4

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


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

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

1

добавьте эту единственную строку к вашей относительной активности, где крышка клавиатуры редактирует метод действия text.inside onCreat ().

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

0

Я знаю, что это старо, но ни одно из вышеперечисленных решений не помогло мне. После обширной отладки я разобрался с проблемой. Решением является установка android:windowTranslucentStatusатрибута в false в моем файле styles.xml.


0

Если поле EditText покрыто клавиатурой, используйте следующий код:

    EditText= findViewById(R.id.edittext)
    EditText?.getParent()?.requestChildFocus(EditText,EditText)

Если вы хотите, чтобы Курсор был в Сфокусированном EditText, используйте EditText.requestFocus()после, EditText?.getParent()?.requestChildFocus(EditText,EditText) который помогает получить фокус и Курсор в Сосредоточенном EditText.


-1

Отредактируйте свой AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

Добавьте это к вашему корневому представлению файла макета.

android:fitsSystemWindows="true"

Вот и все.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.