Android: как мне предотвратить, чтобы программная клавиатура поднимала мой взгляд? - PullRequest
335 голосов
/ 17 ноября 2010

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

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

Ответы [ 24 ]

568 голосов
/ 17 ноября 2010

Вы можете просто поменять флаг windowSoftInputMode своей активности на adjustPan в файле AndroidMainfest.xml внутри тега своей деятельности.

Для получения дополнительной информации см. Официальную документацию .

<activity
   ...
   android:windowSoftInputMode="adjustPan"> 
</activity>
154 голосов
/ 27 мая 2014

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

android:windowSoftInputMode="adjustNothing"
73 голосов
/ 18 октября 2011

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

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

61 голосов
/ 03 апреля 2014

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

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

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

android:windowSoftInputMode="adjustPan"

техника его подводит.

36 голосов
/ 02 июля 2013

Эти ответы не помогли мне.Итак, я попробовал это:

android:windowSoftInputMode="adjustResize"

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

9 голосов
/ 16 декабря 2016

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

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

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

8 голосов
/ 09 мая 2014

Только одна строка, которую нужно добавить ...

Добавьте android:windowSoftInputMode="stateHidden|adjustPan" в требуемую активность вашего manifest file.

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

7 голосов
/ 26 мая 2015

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

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

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

            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);

                    }
                }
            });
7 голосов
/ 10 июня 2016

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

WindowSoftInputMode =Android.Views.SoftInput.AdjustNothing

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

6 голосов
/ 19 марта 2017
android:windowSoftInputMode="stateHidden|adjustNothing"

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

...