Есть ли способ изменить значение android:windowSoftInputMode из класса java?

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

Есть ли способ получить доступ к этому свойству манифеста из кода Java?


person Prasham    schedule 26.05.2011    source источник


Ответы (5)


Используйте следующее, чтобы изменить softInputMode для Activity.

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

Используйте следующее, чтобы изменить тип softInput для EditText.

mEditText.setImeOptions(EditorInfo.IME_ACTION_DONE);

Спасибо @Eliezer за исправление

person AjOnFire    schedule 26.05.2011
comment
Спасибо за этот метод setSoftInputMode... Это действительно помогло мне... Дополнительная информация: Для доступа к таким свойствам, как adjustPan и adjustResize, вы можете перейти к классу WindowManager.LayoutParams, вы можете найти много полезных констант, которые можно использовать в методе setSoftInputMode - person Prasham; 26.05.2011
comment
@ 66CLSjY Спасибо, однако, если я хочу снова установить его на android:windowSoftInputMode=stateAlwaysVisible, то каким будет для него imeaction? - person Bora; 27.06.2013
comment
@SureshBora я объединил ответ @66CLSjY и @aman и, наконец, получил это: getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); Я уже протестировал это и действительно работает - person Humberto Castañeda; 02.07.2013
comment
Как это правильный ответ? Согласно developer.android.com/reference/android/view/ единственными допустимыми значениями для передачи Window#setSoftInputMode являются WindowManager.LayoutParams.SOFT_INPUT_* - person Eliezer; 13.08.2015
comment
@ 66CLSjY У меня это не работает. Можете ли вы сказать мне, что мне не хватает? Я вызываю это внутри действия: getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING); Но клавиатура все еще выталкивает мой FrameLayout, который находится поверх других представлений. Но только это, другие взгляды остаются на своем месте. Это работает, когда я добавляю его в манифест, но я не хочу применять его для всей деятельности. - person Tamás Kozmér; 19.01.2017
comment
Вы вызывали setSoftInputMode перед setContentView в onCreate()? - person AjOnFire; 02.01.2019
comment
ПРИМЕЧАНИЕ. getWindow().setSoftInputMode(...); работает только в действии до вызова setContentView(R.layout...);, потому что он изменяет все элементы управления/представления в макете при загрузке содержимого. - person Pierre; 08.10.2019

Согласно комментарию Прашама , я сделал это, и это спасло мне жизнь, благодаря ему! Режим EditText и SoftWindowInput довольно глючный, когда у вас макет с ScrollView и вы заполняете его динамически.

Поскольку я просмотрел этот пост, но продолжал читать другие ответы/комментарии (например, Прашана), я решил написать его в новом посте.

Ниже код, который я использовал с моим ScrollView:

Activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
person aman    schedule 22.01.2013
comment
привет, аман, немного сложно читать твой ответ здесь. я вижу, вы очень благодарны Прашану, но не могли бы вы убрать некоторые личные комментарии и просто объяснить, что этот код поможет решить? Благодарю. - person Taryn East; 22.01.2013
comment
Хм, не работает, по крайней мере, настроить панорамирование. Это работает, только если я помещаю это в манифест. - person User; 01.12.2013
comment
Это приводит к сбою приложения. - person Farrakh Javed; 20.08.2014

Я стремлюсь использовать два разных режима для вкладок. Режимы SOFT_INPUT_ADJUST_RESIZE и SOFT_INPUT_ADJUST_NOTHING.

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

Приведенная выше строка кода просто не работает сама по себе. Приложение всегда ведет себя в состоянии ADJUST_NOTHING. Однако, если windowSoftInputMode="adjustResize" вставляется в тег <activity> в файле AndroidManifest.xml, размер окна приложения изменяется по умолчанию. Кроме того, когда вы вызываете следующую строку

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

он будет вести себя так, как ожидалось, и ничего не изменится.

P.S. улучшение ответа

person Shnkc    schedule 23.12.2014
comment
Мне нужно перетасовать между ИЗМЕНЕНИЕМ РАЗМЕРА и НИЧЕГО, как это сделать, как только я вернусь ни к чему программно, это не изменится для изменения размера. - person Taranmeet Singh; 11.07.2016
comment
Это действительно хорошее наблюдение. В основном установка windowSoftInputMode="adjustResize" в манифесте помогает позже обрабатывать этот флаг. Особенно в сценарии, когда у вас есть в основном фрагменты в одном действии. Таким образом, можно динамически изменять состояние ввода Activity, программно переключаясь с SOFT_INPUT_ADJUST_RESIZE обратно на SOFT_INPUT_ADJUST_NOTHING по требованию. Хороший! - person sud007; 30.03.2017

В Xamarin Android вы можете сделать это программно

 protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.DetailDesign);
             Window.SetSoftInputMode(SoftInput.AdjustPan);
        }
person zubairz    schedule 30.04.2019

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

android.view.inputmethod.InputMethodManager imm = (android.view.inputmethod.InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

Спасибо, Дипак.

person Sunil Kumar Sahoo    schedule 26.05.2011