Firefly开源社区
标题:
连接有物理键盘时,如何不要让弹出软键盘
[打印本页]
作者:
ancientcc
时间:
2020-8-18 20:55
标题:
连接有物理键盘时,如何不要让弹出软键盘
硬件:AIO-3399J,源码“Android 7.1 SDK源码(industry版本)”,下载时间2020-7-13。
public class InputMethodService extends AbstractInputMethodService {
public boolean onEvaluateInputViewShown() {
if (mSettingsObserver == null) {
Log.w(TAG, "onEvaluateInputViewShown: mSettingsObserver must not be null here.");
return false;
}
if (mSettingsObserver.shouldShowImeWithHardKeyboard()) {
return true;
}
Configuration config = getResources().getConfiguration();
return config.keyboard == Configuration.KEYBOARD_NOKEYS
|| config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES;
}
}
复制代码
跟踪下来,连接有物理键盘时,config.keyboard的确是Configuration.KEYBOARD_QWERTY,但该函数要返回false,还须要同时满足两个条件,一是mSettingsObserver.shouldShowImeWithHardKeyboard()返回false,二是config.hardKeyboardHidden不是Configuration.HARDKEYBOARDHIDDEN_YES。我试下来,这两个条件都没有满足。
第一个条件:mSettingsObserver.shouldShowImeWithHardKeyboard()。会调用Settings.Secure.getInt(mService.getContentResolver(), Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD, 0),得到的值是ShowImeWithHardKeyboardType.TRUE,也就是说函数返回true。
第二个条件:config.hardKeyboardHidden值是Configuration.HARDKEYBOARDHIDDEN_YES。对这问题我对照之前下过的“Android 7.1 SDK源码”(非industry版本),发现两个版本在computeScreenConfigurationLocked时赋给config.hardKeyboardHidden值不一样。以下是industry版本,设的值是Configuration.HARDKEYBOARDHIDDEN_YES。
void computeScreenConfigurationLocked(Configuration config) {
....
// Let the policy update hidden states.
config.keyboardHidden = Configuration.KEYBOARDHIDDEN_NO;
config.hardKeyboardHidden = Configuration.HARDKEYBOARDHIDDEN_YES;
config.navigationHidden = Configuration.NAVIGATIONHIDDEN_NO;
mPolicy.adjustConfigurationLw(config, keyboardPresence, navigationPresence);
}
复制代码
而在非industry版本,设置的值是Configuration.HARDKEYBOARDHIDDEN_NO。
——“Android 7.1 SDK源码(industry版本)”下,连接有物理键盘时,如何不要让弹出软键盘?
欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/)
Powered by Discuz! X3.1