2010-11-17 5 views
240

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

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

+1

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

+1

Этот вопрос дублируется здесь: http://stackoverflow.com/questions/5516216/how-to-avoid-soft-keyboard-pushing-up-my-layout –

ответ

415

Вы можете просто переключить флажок windowSoftInputMode вашего действия на "adjustPan". Для получения дополнительной информации см. official documentation.

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

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

+2

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

+6

Это работает. Благодаря! –

55

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

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

+1

Но в этом случае мягкая клавиатура закрывает часть экрана, и нет возможности прокручивать вниз. Похоже, есть только один способ предотвратить появление нижней панели в верхней части клавиатуры - скрытие ее при открытии клавиатуры ... – Dmitry

+0

вот оно! Эта установка, на мой взгляд, очень интересна, чтобы отметить, так как это единственный способ, которым я нашел для достижения эффекта «отрегулировать ничто», пропавшего имущества! – rupps

+0

Я использую его с Textview Working great tnx –

25

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

android:windowSoftInputMode="adjustResize" 

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

6

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

android:windowSoftInputMode="adjustResize" 
2

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

android:windowSoftInputMode="adjustPan" 

Это может быть лучшее решение по желанию.

44

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

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

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

android:windowSoftInputMode="adjustPan" 

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

+0

Вы добавили 'android: windowSoftInputMode =" adjustPan "' в AndroidManifest.xml? –

+0

Нет, так как это действительно не имело никакого значения для меня. Первая строка кода выполнила эту работу. :) @HabeebPerwad – Dom

+0

Я добавил строку секунд в файле AndoidManifest.xml. Я думаю, после этого только это сработало. так что просто спросил. –

5

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

android:windowSoftInputMode="adjustResize" 
+0

Спасибо вам большое !!! –

4

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

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

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

113

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

android:windowSoftInputMode="adjustNothing" 
+4

Это приводит к тому, что клавиатура накладывается на контент, не делая макет, чтобы пересчитать его высоту. – Reinherd

+10

Это решает проблему клавиатуры, которая подталкивает контент, хотя это то, что я и OP хотели достичь. –

+5

заимствования из @Dom вы можете использовать 'getWindow(). SetSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);' для установки этого значения программно –

1

Для Scroll View:

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

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

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

Надеюсь, что это поможет. : D

1

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

android:windowSoftInputMode="stateHidden|adjustPan" 
+0

, пожалуйста, предоставьте пояснение к вашему коду. – arghtype

6

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

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

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

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

        } 
       } 
      }); 
+1

Aint foolproof! – Skynet

+1

@ Скинет Вы абсолютно правы! Это было обычное решение, которое я использовал для своей собственной проблемы. – Petro

+0

Бесполезно, хорошая работа! – Skynet

3

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

android:windowSoftInputMode="adjustNothing" 

Попробуйте!

6

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

WindowSoftInputMode =Android.Views.SoftInput.AdjustNothing 

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

1

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

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

Я пробовал это, но у меня возникают проблемы, когда вид отсекает немного нижней части представления и толкает представление, чтобы наложить время выше? Любые идеи о том, что макет меняется или что нужно? http://stackoverflow.com/questions/39909897/how-to-push-up-the-whole-view-when-a-keyboard-comes-up-what-layout-changes-need – Lion789

5

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

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

Место это в onResume()

+0

Это сработало для меня. – Juanin

+0

Работал для меня! спасибо –

2
android:windowSoftInputMode="stateHidden|adjustNothing" 

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

1

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

android:windowSoftInputMode="adjustPan" 
1

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

android:isScrollContainer="false" 

Удачи вам!

0

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

android:windowSoftInputMode="stateHidden|adjustResize" 
Смежные вопросы