Android: Как я могу предотвратить мягкую клавиатуру от нажатия моего взгляда вверх?


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

кто - нибудь еще столкнулся с этой проблемой? Знаете, как это исправить?

23 274

23 ответа:

вы можете просто переключить флаг windowSoftInputMode своей деятельности на "adjustPan" в AndroidMainfest.xml-файл insisde ваш тег активности. Проверьте официальная документация для получения дополнительной информации.

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

ни один из ответов не работал для меня, но это сделало трюк:

android:windowSoftInputMode="adjustNothing"

в моем случае причина, по которой кнопки были нажаты, заключалась в том, что вид над ними был ScrollView, и он рухнул с кнопками, нажатыми над клавиатурой независимо от того, какое значение android:windowSoftInputMode Я сидел.

я смог избежать моего нижнего ряда кнопок, толкаемых вверх с помощью мягкой клавиатуры, установив android:isScrollContainer="false" на ScrollView который сидит над кнопками.

вы можете попробовать добавить этот атрибут динамически, поместив следующий код в onCreate способ вашей деятельности:

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

Это сработало для меня, а именно:

android:windowSoftInputMode="adjustPan"

не было.

эти ответы здесь мне не помогли. Поэтому я попробовал это:

android:windowSoftInputMode="adjustResize"

это сработало как шарм, теперь заголовок моего приложения не исчезает. Это более гладко.

для будущих читателей.

Я хотел конкретный контроль над этой проблемой, так что это то, что я сделал:

из фрагмента или действия,скрыть другие виды (это не нужно, пока клавиатура вверх),затем восстановить их решить эту проблему:

            rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    Rect r = new Rect();
                    rootView.getWindowVisibleDisplayFrame(r);
                    int heightDiff = rootView.getRootView().getHeight() - (r.bottom - r.top);

                    if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
                    //ok now we know the keyboard is up...
                        view_one.setVisibility(View.GONE);
                        view_two.setVisibility(View.GONE);

                    }else{
                    //ok now we know the keyboard is down...
                        view_one.setVisibility(View.VISIBLE);
                        view_two.setVisibility(View.VISIBLE);

                    }
                }
            });

для пользователей xamarin добавьте этот код в атрибут Activity класса MainActivity,

WindowSoftInputMode =Android.Views.SoftInput.AdjustNothing

или вы можете добавить этот код Window.SetSoftInputMode(Android.Views.SoftInput.AdjustNothing) к методу OnCreate класса MainActivity.

для этого программно во фрагменте можно использовать следующий код

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

поместите это в onResume ()

до сих пор ответы не помогли мне, поскольку у меня есть кнопка и поле textInput (бок о бок) под textView, который продолжал скрываться клавиатурой, но это решило мою проблему:

android:windowSoftInputMode="adjustResize"

только одна строка, которая будет добавлена...

добавить android:windowSoftInputMode="stateHidden|adjustPan" в нужном активность manifest file.

Я только что решена :) :)

добавьте следующий код в "активность" файла манифеста.

android:windowSoftInputMode="adjustResize"

Это было лучшее, что работало для меня

android:windowSoftInputMode="adjustNothing"

попробуйте!

android:windowSoftInputMode="stateHidden|adjustNothing"

этот код работает.

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

android:windowSoftInputMode="adjustPan"

Это может быть лучшим решением для того, чего вы желали.

Для Просмотра Прокрутки:

если после добавления android:windowSoftInputMode="stateHidden|adjustPan" в вашем Android Манифеста и до сих пор не работает.

это может быть затронуто, потому что при появлении клавиатуры она будет в виде прокрутки, и если ваша кнопка/какие-либо объекты не находятся в вашем виде прокрутки, то объекты будут следовать за клавиатурой и перемещать ее положение.

проверьте свой xml, где находится ваша кнопка, и убедитесь, что она находится под вашей скобкой прокрутки, а не вне ее.

Надежда это помогает. : D

Ну, я смотрел эти ответы, но в моем случае я попал в ту же проблему и получил убежище через очень удобное и простое решение, которое включает в себя размещение очень маленького невинного атрибута в вашем теге Scrollview, находящемся в вашем xml-файле. То есть

android:isScrollContainer="false"

удачи!

попробуйте использовать это:

android:windowSoftInputMode="stateHidden|adjustPan"

этот код может помочь вам. Используйте его в вашем oncreate метод.

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

включить в файл манифеста в разделе Действия, которые вы хотите отобразить .Но убедитесь, что вы не используете полноэкранную активность

android:windowSoftInputMode="adjustPan"

в моем случае мне нужна была клавиатура, чтобы оставаться скрытым и сразу после нажатия кнопки мой макет должен быть скорректирован, поэтому я просто добавил эту команду в манифесте, и он получил супер право.

android:windowSoftInputMode="stateHidden|adjustResize"
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

этот работает на меня.

@проявляться в вашей деятельности:

android:windowSoftInputMode="stateAlwaysHidden|adjustPan"

этот работал на меня

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