【问题标题】:onConfigurationChanged() not firing for keyboardHiddenonConfigurationChanged() 没有为keyboardHidden 触发
【发布时间】:2011-06-08 13:50:35
【问题描述】:

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

AndroidManifest.xml

...
<activity 
    android:name=".SearchActivity" 
    android:label="@string/app_name" 
    android:configChanges="keyboard|keyboardHidden|orientation"
/>
...

SearchActivity.java

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

上面的代码会在我改变方向时显示 Toast,但在软键盘打开或关闭时什么也不做。我已经测试了通过 EditText 聚焦打开软键盘并通过长按菜单按钮手动打开它。既不触发onConfigurationChanged() 呼叫。

因此,由于方向更改触发,代码似乎可以正常工作,但我对软键盘一无所获。有任何想法吗?如果答案是“onConfigurationChanged() 没有捕获软键盘事件”,那么检测和处理此事件的合适解决方案是什么?

以防万一,我正在运行 Gingerbread 的 Droid X 上进行测试。

【问题讨论】:

  • 我也有类似的问题,你终于解决了吗?

标签: java android xml


【解决方案1】:

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

那么怎么做呢?好吧,显示键盘时不会触发任何事件,但是您可以检测到键盘何时导致您的布局被调整。

代码见How to check visibility of software keyboard in Android?

【讨论】:

  • 这对我来说听起来像是一个错误。 keyboardHidden 显然是 Configuration 对象的一部分,甚至在此处的示例中使用 developer.android.com/guide/topics/resources/… 来自文档:A flag indicating whether any keyboard is available. Unlike hardKeyboardHidden, this also takes into account a soft keyboard, so if the hard keyboard is hidden but there is soft keyboard available, it will be set to NO. Value is one of: KEYBOARDHIDDEN_NO, KEYBOARDHIDDEN_YES.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2021-05-23
相关资源
最近更新 更多