深圳全飞鸿

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 168|回复: 4
打印 上一主题 下一主题

关于Android的软键盘

[复制链接]

228

主题

466

帖子

2184

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2184
跳转到指定楼层
楼主
发表于 2024-8-18 20:02:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于Android的软键盘

webview环境下验证:

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



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

使用道具 举报

228

主题

466

帖子

2184

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2184
沙发
 楼主| 发表于 2024-9-5 08:37:55 | 只看该作者

实际测试:
用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.     }
复制代码


回复 支持 反对

使用道具 举报

228

主题

466

帖子

2184

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2184
板凳
 楼主| 发表于 2024-9-8 09:55:10 | 只看该作者
一、主界面
<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;
}
回复 支持 反对

使用道具 举报

228

主题

466

帖子

2184

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2184
地板
 楼主| 发表于 2024-9-8 10:20:18 | 只看该作者
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"/>


回复 支持 反对

使用道具 举报

228

主题

466

帖子

2184

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2184
5#
 楼主| 发表于 2024-9-8 10:25:41 | 只看该作者
EditText始终不弹出软件键盘

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

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|nagomes  

GMT+8, 2025-5-5 06:57 , Processed in 0.033894 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表