Firefly开源社区

标题: 连接有物理键盘时,如何不要让弹出软键盘 [打印本页]

作者: ancientcc    时间: 2020-8-18 20:55
标题: 连接有物理键盘时,如何不要让弹出软键盘
硬件:AIO-3399J,源码“Android 7.1 SDK源码(industry版本)”,下载时间2020-7-13。

  1. public class InputMethodService extends AbstractInputMethodService {
  2.     public boolean onEvaluateInputViewShown() {
  3.         if (mSettingsObserver == null) {
  4.             Log.w(TAG, "onEvaluateInputViewShown: mSettingsObserver must not be null here.");
  5.             return false;
  6.         }
  7.         if (mSettingsObserver.shouldShowImeWithHardKeyboard()) {
  8.             return true;
  9.         }
  10.         Configuration config = getResources().getConfiguration();
  11.         return config.keyboard == Configuration.KEYBOARD_NOKEYS
  12.                 || config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES;
  13.     }
  14. }
复制代码

跟踪下来,连接有物理键盘时,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。
  1. void computeScreenConfigurationLocked(Configuration config) {
  2.   ....
  3.   // Let the policy update hidden states.
  4.   config.keyboardHidden = Configuration.KEYBOARDHIDDEN_NO;
  5.   config.hardKeyboardHidden = Configuration.HARDKEYBOARDHIDDEN_YES;
  6.   config.navigationHidden = Configuration.NAVIGATIONHIDDEN_NO;
  7.   mPolicy.adjustConfigurationLw(config, keyboardPresence, navigationPresence);
  8. }
复制代码

而在非industry版本,设置的值是Configuration.HARDKEYBOARDHIDDEN_NO。

——“Android 7.1 SDK源码(industry版本)”下,连接有物理键盘时,如何不要让弹出软键盘?




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1