Чи є спосіб змінити значення android: windowSoftInputMode з класу Java?


82

Я хочу, щоб мої вкладки мали різні windowSoftInputModeвластивості для кожної вкладки. Як отримати доступ до цієї властивості з класу Java, коли вся обробка вашої вкладки здійснюється за один єдиний захід?

Чи є спосіб отримати доступ до цієї властивості маніфесту з коду Java?

Відповіді:


124

Використовуйте наступне, щоб змінити softInputMode для діяльності.

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

Використовуйте наступне, щоб змінити тип програмного вводу для EditText.

mEditText.setImeOptions(EditorInfo.IME_ACTION_DONE);

Дякую @Eliezer за виправлення


20
Дякую за цей метод setSoftInputMode ... Це мені дуже допомогло ... Додаткова інформація: Щоб отримати доступ до властивостей, таких як adjustPanі adjustResizeви можете перейти до WindowManager.LayoutParamsкласу, ви можете знайти багато корисних констант, які можна використовувати в setSoftInputModeметоді
Прашем

7
@SureshBora я поєднав @ 66CLSjY відповідь і @aman, і я нарешті отримав це: getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);я це вже тестував, і справді працює
Гумберто Кастанеда

1
Як це правильна відповідь? Відповідно до developer.android.com/reference/android/view/… єдиними прийнятними значеннями для передачі Window#setSoftInputModeєWindowManager.LayoutParams.SOFT_INPUT_*
Еліезер

4
@ 66CLSjY У мене це не працює. Чи можете ви сказати мені, чого я пропускаю? Я називаю це всередині діяльності: getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);Але клавіатура все одно підштовхує мій FrameLayout, який знаходиться поверх інших видів. Але саме це, інші погляди залишаються на своєму місці. Це працює, коли я додаю його в Маніфест, але я не хочу застосовувати його для всієї діяльності.
Тамаш Козмер

1
Ви викликали setSoftInputMode перед setContentView у onCreate ()?
AjOnFire

36

Згідно з коментарем Прашама , я зробив це, і це врятувало мені життя, завдяки йому! EditTextІ SoftWindowInputрежим досить глючний , коли у вас є макет з ScrollViewі ви заповнюєте його динамічно.

Оскільки я пройшов цей допис, але продовжував читати інші відповіді / коментарі (як у Прашана), я вирішив написати це в новому дописі.

Нижче коду, який я використовував зі своїм ScrollView:

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

7
привіт амане, прочитати вашу відповідь тут трохи важко. я бачу, що ви дуже вдячні Прашану, але чи можете ви очистити деякі особисті коментарі та просто пояснити, що допоможе вирішити цей код? Дякую.
Тарін Іст

1
Хм, не працює, принаймні, щоб налаштувати панораму. Це працює, лише якщо я вклав це в маніфест.
Ixx

Це збій програми.
Фаррах Джавед

10

Я прагну використовувати два різні режими для вкладок. Режими - 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);

він буде поводитися, як очікувалося, і розмір нічого не змінюється.

PS вдосконалення відповіді


1
Мені потрібно перетасувати між ЗМІНИТИ І НІЧОГО, як це можна зробити, як тільки я повернусь до нічого програмно, це не змінює розмір.
Таранміт Сінгх

1
Це справді приємне спостереження. В основному встановлення windowSoftInputMode="adjustResize"в маніфесті допомагає обробляти цей прапор пізніше. Особливо в сценарії, коли у вас є переважно фрагменти в одиночній діяльності. Отже, можна динамічно продовжувати змінювати вхідний стан Діяльності, програмно перемикаючись із SOFT_INPUT_ADJUST_RESIZE зворотного режиму SOFT_INPUT_ADJUST_NOTHING на запит. Хороший!
sud007

1

В Xamarin Android ви можете робити це програмно, як це

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

0

Ви можете використовувати наступний код програмно

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

Дякую Діпаку

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.