有什么办法可以从java类更改android:windowSoftInputMode值吗?


82

我想让我的标签页具有不同的windowSoftInputMode属性。当通过单个活动完成选项卡的所有处理时,如何从Java类访问此属性?

有什么方法可以从Java代码访问此清单属性吗?

Answers:


124

使用以下命令更改Activity的softInputMode。

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

使用以下命令更改EditText的softInput类型。

mEditText.setImeOptions(EditorInfo.IME_ACTION_DONE);

感谢@Eliezer的更正


20
感谢这个setSoftInputMode方法...确实对我有帮助...其他信息:要访问类似的属性,adjustPan并且adjustResize可以WindowManager.LayoutParams上课,您可以找到许多可以在setSoftInputMode方法中使用的有用常量
Prasham,2011年

7
@SureshBora我将@ 66CLSjY答案和@aman结合在一起,我终于明白了:getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);我已经对其进行了测试,并且确实有效
HumbertoCastañeda13年

1
这是正确的答案吗?根据developer.android.com/reference/android/view/…唯一可以通过的值Window#setSoftInputModeWindowManager.LayoutParams.SOFT_INPUT_*
Eliezer

4
@ 66CLSjY它对我不起作用。你能告诉我我想念什么吗?我在一个活动中称其为:getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);但是键盘仍然推起我的FrameLayout,它位于其他视图之上。但是,仅此而已,其他观点依然存在。当我将其添加到清单中时,它可以工作,但是我不想将其应用于整个活动。
塔玛斯

1
您是否在onCreate()中的setContentView之前调用了setSoftInputMode?
AjOnFire

36

根据Prasham的评论,感谢他,我做到了这一点,挽救了我的生命!当您使用布局并且要动态填充时,EditTextandSoftWindowInput模式是很麻烦的ScrollView

由于我已经阅读了这篇文章,但继续阅读其他答案/评论(例如Prashan的答案/评论),所以我决定将其写在新的帖子中。

在我的代码下面ScrollView

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

7
嗨,阿曼,在这里阅读您的答案有些困难。我可以看到您非常感谢Prashan,但是能否请您清除一些个人评论,并仅说明此代码将有助于解决什么问题?谢谢。
Taryn East

1
嗯,这行不通,至少是要调整平移。仅当我将其放在清单中时它才起作用。
Ixx 2013年

这使应用程序崩溃。
Farrakh Javed 2014年

10

我的目标是为标签使用两种不同的模式。模式是SOFT_INPUT_ADJUST_RESIZESOFT_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
我需要在RESIZE和NOTHING之间进行混洗,一旦我以编程方式无所事事,它将不会更改为调整大小。
Taranmeet Singh'7

1
这是非常好的观察。基本上windowSoftInputMode="adjustResize"在清单中设置有助于以后处理此标志。特别是在单个活动中大部分包含碎片的情况下。因此,可以通过编程方式从按需切换SOFT_INPUT_ADJUST_RESIZE SOFT_INPUT_ADJUST_NOTHING 按需动态地保持更改活动输入状态。好东西!
sud007'3

0

您可以以编程方式使用以下代码

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

谢谢Deepak


0

在Xamarin Android中,您可以像这样编程

 protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.DetailDesign);
             Window.SetSoftInputMode(SoftInput.AdjustPan);
        }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.