深圳全飞鸿

标题: 关于Android的软键盘 [打印本页]

作者: syant    时间: 2024-8-18 20:02
标题: 关于Android的软键盘
关于Android的软键盘

webview环境下验证:

验证一:这个方法可以关闭软件盘,但是硬件键盘也失效了
android:focusable="false"
android:focusableInTouchMode="false"



验证二:这个无效
android:inputType="text"

作者: syant    时间: 2024-9-5 08:37

实际测试:
用getRootView或用webView都可以关掉软键盘, 缺点是下次扫描,软键盘还是会出来
  1. public void hideSoftKeyboard(){
  2.         /*View view = getCurrentFocus();
  3.         if (view != null) {
  4.             // 隐藏软键盘
  5.            String name = view.getClass().toString();
  6.             ToastUtils.showLongToast(context,name);
  7.         }*/

  8.        /* View view = getWindow().getDecorView().getRootView();
  9.         InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
  10.         if (imm != null) {
  11.             imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
  12.         }*/
  13.         //
  14.         InputMethodManager imm2 = (InputMethodManager) webView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
  15.         if (imm2 != null) {
  16.             imm2.hideSoftInputFromWindow(webView.getWindowToken(), 0);
  17.         }
  18.         getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
  19.     }
复制代码



作者: syant    时间: 2024-9-8 09:55
一、主界面
<activity android:name="com.nagomes.pda.allparts.HomeActivity"
    android:windowSoftInputMode="stateAlwaysHidden">

二、加载protected void onCreate(Bundle savedInstanceState) {
    setTitle(false);//设置是否显示标题栏
    setState(false);//设置是否显示状态栏
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
    super.onCreate(savedInstanceState);
}


三、动态
if (message.equals("::S0JPTg==")) {
    Log.d(TAG, "软键盘打开");
    ToastUtils.showLongToast(context,"软键盘打开!");
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
    result.confirm();
    return true;
}
if (message.equals("::S0JPRkY=")) {
    Log.d(TAG, "软键盘关闭");
    ToastUtils.showLongToast(context,"软键盘关闭!");
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
    result.confirm();
    return true;
}

作者: syant    时间: 2024-9-8 10:20
Q&A
Q:扫码枪扫码后,自动调起系统软键盘
A:扫码枪相当于外接键盘,对于外接键盘不同的Android设备表现不同,一般我们期望外接键盘与系统键盘互斥。看厂商是否在Framework有做过适配处理。若要不弹出系统软键盘,可禁用Activity软键盘:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
1
解除禁用:

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
1
Q:扫码枪扫码后,自动弹出软键盘,同时EditText显示内容有丢失或代码监听扫码事件,监听到的KeyEvent.getKeyCode是KeyEvent.KEYCODE_ENTER
A:由于扫码枪与系统软键盘冲突,部分数据被系统软键盘拦截,禁用可解决此问题。

Q:扫码枪扫码后,EditText失去焦点
A:扫到的码最后一般带有回车符,导致EditText失去焦点。可给EditText配置如下next系列属性,使其下个焦点仍然指向自己:

<EditText
            android:id="@+id/edit_scan_code"
            android:layout_width="800px"
            android:layout_height="200px"
            android:textSize="50px"
            android:nextFocusDown="@id/edit_scan_code"
            android:nextFocusForward="@id/edit_scan_code"
            android:nextFocusLeft="@id/edit_scan_code"
            android:nextFocusRight="@id/edit_scan_code"
            android:nextFocusUp="@id/edit_scan_code"
            android:nextClusterForward="@id/edit_scan_code"/>



作者: syant    时间: 2024-9-8 10:25
EditText始终不弹出软件键盘

EditText edit=(EditText)findViewById(R.id.edit);
         edit.setInputType(InputType.TYPE_NULL);






欢迎光临 深圳全飞鸿 (http://www.nagomes.com/disc/) Powered by Discuz! X3.2