Javaクラスからandroid:windowSoftInputMode値を変更する方法はありますか?


82

タブwindowSoftInputModeごとに異なるプロパティを持つようにタブを操作したいと思います。タブのすべての処理が単一のアクティビティから実行される場合、Javaクラスからこのプロパティにアクセスするにはどうすればよいですか?

Javaコードからこのマニフェストプロパティにアクセスする方法はありますか?

回答:


124

以下を使用して、アクティビティのsoftInputModeを変更します。

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

EditTextのsoftInputタイプを変更するには、以下を使用します。

mEditText.setImeOptions(EditorInfo.IME_ACTION_DONE);

訂正してくれた@Eliezerに感謝します


20
このsetSoftInputMode方法のおかげで...それは本当に私を助けた...情報追加:アクセスプロパティしたいadjustPanadjustResizeあなたが行くことができるWindowManager.LayoutParamsクラス、あなたが使用することができ、多くの有用な定数を見つけることができるsetSoftInputMode方法
Prasham

7
@SureshBora私は66CLSjYの答えと@aman @組み合わせると私は最終的に、この得た:getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);私はすでにそれをテストし、実際に動作する
ウンベルト・カスタネダ

1
これはどのように正しい答えですか?developer.android.com/reference/android/view/によるとWindow#setSoftInputModeWindowManager.LayoutParams.SOFT_INPUT_*

4
@ 66CLSjYそれは私のために動作しません。何が足りないのか教えていただけますか?私はこれをアクティビティ内で呼び出します。getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);しかし、キーボードは他のビューの上にあるFrameLayoutを押し上げます。しかし、それだけで、他の見解はそのままです。マニフェストに追加すると機能しますが、アクティビティ全体に適用したくありません。
タマシュKozmér

1
onCreate()のsetContentViewの前にsetSoftInputModeを呼び出しましたか?
AjOnFire

36

プラシャムのコメントによると、私はこれをしました、そしてそれは彼のおかげで私の命を救いました!EditTextそしてSoftWindowInputあなたとレイアウトを持っているときのモードは非常にバグがありScrollView、あなたはそれを動的に充填されています。

私はこの投稿を読みましたが、他の回答/コメント(Prashanのものなど)を読み続けていたので、新しい投稿に書くことにしました。

私が使用したコードの下ScrollView

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

7
こんにちはアマン、ここであなたの答えを読むのは少し難しいです。プラシャンにとても感謝していることがわかりますが、個人的なコメントのいくつかをクリアして、このコードが解決に役立つことを説明していただけますか?ありがとう。
タリンイースト2013

1
うーん、少なくともパンを調整するように設定するには、機能しません。マニフェストに入れた場合にのみ機能します。
ixx

これにより、アプリケーションがクラッシュします。
Farrakh Javed

10

私はタブに2つの異なるモードを使用することを目指しています。モードがあるSOFT_INPUT_ADJUST_RESIZESOFT_INPUT_ADJUST_NOTHING

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

上記のコード行は、それ自体では機能しません。アプリは常に状態で動作しますADJUST_NOTHING。ただし、がAndroidManifest.xmlファイルのタグにwindowSoftInputMode="adjustResize"挿入されている場合<activity>、アプリウィンドウはデフォルトでサイズ変更されます。また、次の電話をかけると

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

期待どおりに動作し、サイズは変更されません。

答えに対するPSの改善


1
RESIZEとNOTHINGの間でシャッフルする必要があります。プログラムで何にも戻らないと、サイズ変更に変更されません。
Taranmeet Singh 2016

1
これは本当に素晴らしい観察です。基本的にwindowSoftInputMode="adjustResize"マニフェストで設定すると、後でこのフラグを処理するのに役立ちます。特に、単一のアクティビティにフラグメントがほとんどあるシナリオでは。したがって、プログラムでオンデマンドにSOFT_INPUT_ADJUST_RESIZE 戻すことで、アクティビティの入力状態を動的に変更し続けることができますSOFT_INPUT_ADJUST_NOTHING 。良いですね!
sud007 2017年

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

ありがとうDeepak

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.