onConfigurationChanged()没有为keyboardHidden触发

Ton*_*age 18 java xml android

我已经按照这里的各种问题和答案设置我的Android活动来覆盖onConfigurationChanged(),以便在软键盘打开和关闭时执行逻辑.这是我的代码的相关摘录.我把它归结为最简单的场景:

AndroidManifest.xml中

...
<activity 
    android:name=".SearchActivity" 
    android:label="@string/app_name" 
    android:configChanges="keyboard|keyboardHidden|orientation"
/>
...
Run Code Online (Sandbox Code Playgroud)

SearchActivity.java

...
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    Toast.makeText(this, "onConfigurationChanged()", Toast.LENGTH_SHORT).show();
}
...
Run Code Online (Sandbox Code Playgroud)

当我改变方向时,上面的代码将显示Toast,但当软键盘打开或关闭时,什么都不做.我已经测试过通过EditText聚焦打开软键盘,并通过长按菜单按钮手动打开它.也没有onConfigurationChanged()拨打电话.

所以现在的代码似乎可以工作,因为方向更改会触发,但我对软键盘没有任何帮助.有任何想法吗?如果答案是"onConfigurationChanged()没有捕获软键盘事件",那么检测和处理此事件的适当解决方案是什么?

为了防止它相关,我正在测试运行Gingerbread的Droid X.

Sha*_*zon 15

不,onConfigurationChange()不会捕获软键盘事件:它不是配置更改.方向更改会导致使用一组新资源(例如layout-land vs layout-port),这是配置更改的定义.

那怎么办呢?好吧,显示键盘时没有事件被触发,但您可以检测键盘何时调整布局.

请参阅如何检查Android中软件键盘的可见性?代码.

  • 这对我来说听起来像个错误.`keyboardHidden`显然是`Configuration`对象的一部分,甚至在这里的示例中使用http://developer.android.com/guide/topics/resources/runtime-changes.html来自文档:`一个标志,指示是否有键盘可用.与hardKeyboardHidden不同,这也考虑了软键盘,因此如果硬键盘被隐藏但有可用的软键盘,它将被设置为NO.价值是以下之一:KEYBOARDHIDDEN_NO,KEYBOARDHIDDEN_YES (32认同)