有没有办法改变android:windowSoftInputMode值来自java类?

Pra*_*ham 76 android android-softkeyboard android-tabhost

我想用我的标签来windowSoftInputMode为每个标签设置不同的属性.当从一个单独的活动完成对标签的所有处理时,如何从java类访问此属性?

有没有办法从java代码访问这个清单属性?

AjO*_*ire 111

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

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Run Code Online (Sandbox Code Playgroud)

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

mEditText.setImeOptions(EditorInfo.IME_ACTION_DONE);
Run Code Online (Sandbox Code Playgroud)

感谢@Eliezer的纠正

  • 感谢这个setSoftInputMode方法...它真的帮助了我......附加信息:要访问`adjustPan`和`adjustResize`这样的属性,你可以使用`WindowManager.LayoutParams`类,你可以找到许多有用的常量可以使用在`setSoftInputMode`方法中 (19认同)
  • @SureshBora我结合了@ 66CLSjY的答案和@aman,我终于得到了这个:`getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);`我已经测试了它,并且确实有效 (7认同)
  • @ 66CLSjY这对我不起作用.你能告诉我我错过了什么吗?我在一个活动中调用它:`getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);`但键盘仍然推动我的FrameLayout,这是在其他视图之上.但就是这样,其他观点仍然存在.当我在Manifest中添加它时,它可以工作,但我不想将它应用于整个Activity. (3认同)

小智 33

根据Prasham的评论,我这样做了,它救了我的命,感谢他!当你有一个布局并且你正在动态地填充它时,EditTextSoftWindowInput模式是非常错误的ScrollView.

由于我已经完成了这篇文章,但继续阅读其他答案/评论(如Prashan的那篇),我决定在一篇新帖子中写下来.

在我使用的代码下面ScrollView:

Activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
Run Code Online (Sandbox Code Playgroud)

  • 你好,在这里阅读你的答案有点困难.我可以看到你非常感谢Prashan,但是请你清楚一些个人意见,并解释一下这段代码将有助于解决的问题?谢谢. (7认同)

Shn*_*nkc 10

我的目标是为标签使用两种不同的模式.模式是SOFT_INPUT_ADJUST_RESIZESOFT_INPUT_ADJUST_NOTHING.

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
Run Code Online (Sandbox Code Playgroud)

上面的代码行本身不起作用.应用程序始终处于某种状态ADJUST_NOTHING.但是,如果windowSoftInputMode="adjustResize"将其插入<activity>AndroidManifest.xml文件中的标记,则会将应用程序窗口调整为默认值.此外,当您调用以下行时

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
Run Code Online (Sandbox Code Playgroud)

它将按预期运行,没有任何重新调整大小.

PS改进答案

  • 我需要在“调整大小”和“无”之间进行切换,一旦我以编程方式返回到“无”,它就不会改变调整大小,如何才能做到这一点。 (2认同)