Как сдвинуть раскладку вверх при отображении программной клавиатуры 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, как только у меня будет время. Спасибо за репортаж
Бхаргав Танки
12

Поместите эту строку во время объявления активности в manifest.xml

<android:windowSoftInputMode="adjustPan">
Даянанд Вагмаре
источник
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
3

Это все, что нужно:

<activity android:windowSoftInputMode="adjustResize"> </activity>
Боллинг
источник
2

Согласно этому руководству , правильный способ добиться этого - объявить в своем манифесте:

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

    </activity>
David_E
источник
Похоже, что 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 и этот тег к тому действию, которое вы хотите прокрутить во всплывающем
окне