Как сдвинуть раскладку вверх при отображении программной клавиатуры android


85

У меня есть экран входа с двумя EditTextsи кнопка входа в моем макете. Проблема в том, что когда я начинаю печатать, отображается экранная клавиатура, закрывающая кнопку входа в систему. Как я могу подтолкнуть раскладку вверх или над клавиатурой, когда она появится?

Я не хочу использовать a ScrollView, просто хочу реализовать его без прокрутки вниз. Пожалуйста, предложите мне способ сделать это. Заранее спасибо.

Ответы:


59

Установите windowSoftInputModeсвойство на adjustPanиadjustResize

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

32
Это не сработало из коробки, но изменили его, чтобы <activity android:windowSoftInputMode="adjustResize"></activity>заставить его работать.
nickiaconis

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

как сказал @nickiaconis, мне не нужен параметр «adjustPan», и он работает для меня, спасибо
danisupr4

Есть ли эквивалент для переносимого проекта Xamarin.Forms? поэтому мне не нужно делать это для каждой отдельной целевой платформы.
user20358

6
Параметр должен быть одним из значений, перечисленных в следующей таблице, или сочетанием одного значения «состояние ...» и одного значения «настроить ...». Установка нескольких значений в любой группе - например, нескольких значений «состояние ...» - дает неопределенные результаты. developer.android.com/guide/topics/manifest/…
EmJiHash

34

Попробуйте это в файле манифеста Android, соответствующем действию.

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

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

24

Используйте этот код в onCreate()методе:

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

1
Спасибо, это помогло. <activity android: windowSoftInputMode = "adjustPan"> </activity> по какой-то причине у меня не работал.
DH28,

1
Этот метод, но с использованием SOFT_INPUT_ADJUST_RESIZEвместо ADJUST_PAN, сработал для меня
Вой

16

только

android:windowSoftInputMode="adjustResize"

в вашем теге активности внутри файла манифеста поможет


Я использую ConstraintLayout, это решение мне не подходит.
Каран Шарма

На момент написания этого ответа ConstraintLayout не был добавлен в макеты Android. Вы можете найти в этой теме любое другое решение, которое вам больше подходит. И, конечно же, я обновлю свой ответ для ConstraintLayout, как только у меня будет время. Спасибо за репортаж
Бхаргав Танки


10

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


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

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 08


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


1
Вы можете добавить пояснение ...?
chevybow

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