М’яка клавіатура 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 ....
Karue Benson Karue

162

У мене були такі ж проблеми. Спробуйте наступний код:

android:windowSoftInputMode="adjustPan"

додайте його до свого manifest.xml у тег активності, що містить дані. приклад:

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

14
Найпростіша відповідь! Як і примітка, це потрібно додати у файл Manifest та під потрібну нам діяльність.
NRR

4
У моєму випадку це, принаймні, не зіпсує мій html, як це adjustResizeбуло б, але воно також охоплює мої поля введення
Rahul Dole

8
Це мені не допомогло
vikifor

1
@vikifor, переконайтеся, що ви додали текст редагування до перегляду прокрутки. Навіть Якщо у вашому макеті всього 3-4 поля, додайте всі свої поля до перегляду прокрутки. Це робить його прокручуваним, коли відкривається віртуальна клавіатура.
Kuldeep Sakhiya

Добре працює, але щоразу, коли я торкаюсь перегляду 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>

Тут найважливішим значенням є prilagodResize. Це змістить весь інтерфейс вгору, щоб звільнити місце для клавішної клавіатури.


Але це може зіпсувати вигляд вашого html, якщо ваш css має в основному відсоткові значення
Rahul Dole

Ви тут здогадуєтесь чи спробували? btw, це не повинно зіпсувати ваш HTML. Я спробував із веб-переглядами. Це змістить весь погляд не на окремі елементи.
DanKodi

1
Я спробував це. Я думаю, що це трапляється тому, що в моєму CSS в основному відсоткові значення
Рахул Доул

@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, але це залежить від вас. Крім того, встановлення стилю прокрутки для зовнішнього вкладу допомагає, принаймні, на моїх пристроях.


4
Хоча відповідь Майри - це те, що кожен повинен робити (і, мабуть, те, що Google думав, що всі повинні робити), це те, що я в кінцевому підсумку роблю майже кожен раз. Це єдиний спосіб отримати реальний контроль, необхідний для правильного відображення. Зітхнути.
Скотт Біггс

не варто недооцінювати коментар Скотта. Це правда. у моєму випадку я не хотів змінити розмір або змінювати перегляд списку, але хотів зайняти редагуванняTxt у кінці цього списку. Отже, я помістив editText у scrollView, і він працює як очікувалося.
Дарпан

15

Все, що вам потрібно зробити - це

android:isScrollContainer="true"

джерело: http://www.davidwparker.com/2011/08/25/android-fixing-window-resize-and-scrolling/


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

Крім того, нічого на сторінці не допомогло мені, але посилання показало додавання коригуванняResize до активності windosSoftInputMode, і це спрацювало.
Стівен Сміт

14

Вибачте за відродження старої android:imeOptions="flagNoFullscreen"теми, але в вашому елементі EditText ніхто не згадав налаштування


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

працює для android EditText, хоча він не працює для веб-перегляду або xwalkview. Коли м'яка клавіатура приховує вхід у веб-перегляді або xwalkview, який ви використовуєтеandroid:windowSoftInputMode="adjustResize"


4

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


Мені здається, що мені потрібен спосіб зробити вікно "штучно" довшим, щоб вид міг прокручуватися. В даний час відносний макет встановлений на android: layout_width = "wrap_content" android: layout_height = "wrap_content"
Алексіс

Я тоді не знаю рішення. Можливо, ви можете вручну відрегулювати значення ширини та висоти відповідно до своїх потреб, розтягнувши їх далі до того, до якого вирішує "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.requestFocus()після цього, EditText?.getParent()?.requestChildFocus(EditText,EditText) це допомагає отримати фокус і курсор у фокусованому редагуванні тексту.


-1

Редагуйте свій AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

Додайте це до перегляду кореня файлу "Макет".

android:fitsSystemWindows="true"

Це все.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.