当前位置: 首页 > 面试题库 >

onConfigurationChanged()没有为键盘触发

颜杰
2023-03-14
问题内容

我遵循了这里的各种问题和答案来设置我的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()无法捕获软键盘事件”,那么检测和处理此事件的合适解决方案是什么?

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


问题答案:

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

那怎么办呢?嗯,显示键盘时不会触发任何事件,但是您可以检测键盘何时调整布局。

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



 类似资料:
  • 问题内容: 我在告诉Android 方向更改时不打电话时遇到了麻烦。我已添加到清单中,但仍在调用方向更改时添加。这是我的代码。 AndroidManifest.xml SearchMenuActivity.java 还有我的LogCat输出 有人知道我在做什么错吗?谢谢。 问题答案: 要尝试的几件事: 而不是 确保您没有在任何地方打电话。这将导致onConfigurationChange()无法触

  • 我有一个SherlockFragmentActivity和一个位于TabManager中的Sherlock Fragment。在这个片段中,我在LinearLayout中有单选按钮、复选框、按钮和编辑文本。按下编辑文本时,键盘有时不响应。 在2.1 AVD中,键盘响应不一致,在4.0 AVD中,键盘根本没有响应,而在设备上,键盘响应不一致。有时按下其他对象会激活显示键盘的功能。 以下是编辑文本的X

  • 键盘/鼠标/触摸板 [HW] atkbd.set={2|3} 设置atkbd驱动(CONFIG_KEYBOARD_ATKBD)的键盘类型:2(默认值)表示AT键盘;3 表示PS/2键盘。 [HW] atkbd.reset 在初始化AT或PS/2键盘时重置键盘状态。常用于解决从休眠状态唤醒后键盘失效的故障。 [HW] atkbd.softraw={0|1} 当键盘按键被按下时,是返回原始的扫描码(S

  • 有没有办法做到这一点? 我有一个角色,说“/”,我想得到这个的键盘组合。 对于德语布局,“/”将是Shift7。

  • 我正在尝试构建一个自动化脚本来安装chrome扩展。 在我的本地系统(windows 10)上,当使用java的Robot类时,所有这些都可以正常工作,因为我有一个物理键盘连接到我的计算机。 问题是——当我试图在虚拟机(亚马逊EC2,视窗服务器)上运行这种自动化时,机器人类不起作用,因为它无法检测键盘的物理连接。 有没有其他方法可以在不连接键盘的情况下模拟键盘行程? 仅供参考,我必须使用键盘,因为

  • 我正在尝试使用selenium创建自动化,以安装chrome扩展。当我尝试在amazon虚拟机上运行这个jar时,我遇到了一个问题,因为当我尝试用robot类按enter键时,它不起作用,因为我没有连接物理键盘。我不能在selenium中使用sendkeys,因为来自google的pop不在同一页面,selenium无法识别它。有什么解决办法吗?