Як перемістити розкладку вгору, коли на клавіатурі відображається андроїд


85

У мене в EditTextsмакеті екран входу з двома і кнопкою входу. Проблема полягає в тому, що, коли я починаю друкувати, на екрані з’являється програмна клавіатура, яка закриває кнопку входу. Як я можу натиснути розкладку вгору або над клавіатурою, коли вона з’являється?

Я не хочу використовувати a ScrollView, просто хочу реалізувати його, не прокручуючи вниз. Будь ласка, запропонуйте мені якийсь спосіб зробити це. Заздалегідь спасибі.

Відповіді:


59

Встановіть для windowSoftInputModeвластивості значення adjustPanіadjustResize

<activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity>

32
Це не спрацювало нестандартно, але змінивши його на <activity android:windowSoftInputMode="adjustResize"></activity>роботу.
nickiaconis

2
Згадайте, яку версію Android ви використовуєте. Деякі відповіді можуть бути абсолютно марними в деяких версіях.
Джош

як сказав @nickiaconis, мені не потрібен параметр 'AdjuPan', і він працює для мене, дякую
danisupr4

Чи існує еквівалент для портативного проекту Xamarin.Forms? тому мені не потрібно робити це для кожної окремої цільової платформи.
користувач20358

6
Параметр повинен бути одним із значень, перелічених у наступній таблиці, або комбінацією одного значення "стану ..." плюс одного значення "налаштувати ...". Встановлення кількох значень в будь-якій групі - наприклад, кілька значень "стан ..." - має невизначені результати. developer.android.com/guide/topics/manifest/…
EmJiHash

34

Спробуйте це у файлі маніфесту android, що відповідає дії.

<activity android:windowSoftInputMode="adjustPan"> </activity>

1
мій перехід перейти вгору вгору, але коли клавіатура закрита і відкрита знову, не рухатися.
набеге

24

Використовуйте цей код у onCreate()методі:

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

1
Дякую, це допомогло. <Activity android: windowSoftInputMode = "AdjuPan"> </activity> з якоїсь причини у мене не спрацював.
DH28,

1
Цей метод, але використання SOFT_INPUT_ADJUST_RESIZEзамість ADJUST_PAN, у мене спрацював
Вой

16

тільки

android:windowSoftInputMode="adjustResize"

у вашому тегу активності у файлі Manifest зробить свою справу


Я використовую ConstraintLayout, це рішення для мене не працює.
Karan Sharma

На момент написання цієї відповіді ConstraintLayout не був доданий до макетів Android. Будь ласка, знайдіть будь-яке інше рішення в цій темі, яке вам найбільше підходить. І, звичайно, я оновлю свою відповідь для ConstraintLayout, як тільки знайду час. Дякуємо за повідомлення
Бхаргав Танкі


10

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


2
Я можу перемістити розкладку вгору, коли відображається клавіатура, але не можу перейти у вихідне положення, поки клавіатура ховається, може допомогти мені в цьому.
Kishore

9
android:fitsSystemWindows="true"

додати властивість до основного макета файлу макета та

android:windowSoftInputMode="adjustResize"

додати рядок у вашому файлі Manifest.xml на вашому Activty

це ідеальна робота для мене.


fitsSystemWindows не має нічого спільного з клавіатурою
Тім

@TimCastelijns, у моєму випадку (повноекранна активність) це має значення. Якщо встановити значення false, подання не рухатимуться вгору.
CoolMind

6

Помістіть це у свою декларацію про активність у файлі маніфесту <activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity>

або якщо ви хочете, ви можете додати метод onCreate () до вашої діяльності

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

2
Код маніфесту неправильний, таким чином поведінка невизначена (ви встановлюєте два значення конфлікту, див. Offdoc: developer.android.com/guide/topics/manifest/… , android:windowSoftInputModeопис). @ kiwicomb123, виберіть один параметр, або система вибере для вас (і цей вибір може змінитися на іншому пристрої / версії API)
kpower


2

Відповідно до цього посібника , правильним способом досягнення цього є заява у вашому маніфесті:

<activity name="EditContactActivity"
        android:windowSoftInputMode="stateVisible|adjustResize">

    </activity>

Схоже, stateVisible спричинить його відкриття, коли активність почнеться, тому не потрібно фактично натискати клавіатуру вгору.
CodyEngel

2

Коли з'являється програмна клавіатура, вона змінює розмір основного макета, і що вам потрібно зробити, це зробити прослуховувач для цього основного розкладу, і всередині цього прослуховувача додати код scrollT0(x,y)для прокрутки вгору.


2

Якщо ви працюєте з xamarin, ви можете помістити цей код WindowSoftInputMode =Android.Views.SoftInput.AdjustPan | Android.Views.SoftInput.AdjustResizeв атрибут активності класу MainActivity. Наприклад, тепер атрибут активності буде виглядати нижче

    [Activity(WindowSoftInputMode =Android.Views.SoftInput.AdjustPan | Android.Views.SoftInput.AdjustResize)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
    {
        //some code here.
    }

0

Використовуйте відносний макет, він налаштує вигляд так, щоб ви могли бачити його під час набору тексту


0

Це працює як для мене чарівність

getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

0

Ви повинні використовувати

android:windowSoftInputMode="adjustPan|stateHidden"

у вашому AndroidManifest.xmlфайлі, де ви заявляєте про свою активність. Це налаштує вміст вашого макета, коли в макеті відображається клавіатура.


-2

Це точно вам підійде.

android: windowSoftInputMode = "AdjuPan"


1
Чи можете ви додати якесь пояснення ...?
chevybow

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