安卓系统如何仅展示自定义键盘?

4

我有一个应用程序,我需要创建一个自定义键盘,因为条形码扫描仪被归类为硬件键盘,而硬件键盘会禁用软键盘。问题是当没有扫描器连接时,不需要显示内置的软键盘。我有一个按钮来显示自定义键盘,它还将使用

InputMethodManager

隐藏默认键盘。

((InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(advText.getWindowToken(), 0);

(advText是EditText的扩展版本)

我尝试将这行代码放在EditText的onFocusChanged方法中,但是没有任何反应。如果使用setInputType(InputType.TYPE_NULL);则Android键盘永远不会显示,但EditText不会显示光标或来自自定义键盘的任何内容(但是我知道键被存储了,因为我的“完成”键很好地将文本发送到其他位置)。

我可以禁用此应用程序的Android键盘,只要EditText显示光标,并且仅在使用按钮时显示自定义键盘即可。

我查看了这些答案,但没有找到解决方案。

关闭/隐藏Android软键盘

当edittext聚焦时如何显示软键盘

如何在EditText上隐藏Android软键盘

编辑:

我的当前解决方案是在EditText的onCheckIsTextEditor中运行hide方法,因为它似乎在onFocusChanged之后运行,并且大约每秒钟调用一次。但这是一个丑陋的hack,因为键盘仍然会显示一瞬间并使我的布局来回移动。我的当前测试设备包括带有4.1.2的Motorola Photon Q 4G LTE和带有4.0.3的Honeywell Dolphin 70e Black。

2个回答

0

EditText提供了一个标志textIsSelectable,将其设置为true即可实现此功能。使用此功能,光标仍然存在,您可以选择/复制/剪切/粘贴,但软键盘永远不会显示。需要API 11及以上版本。

您可以在xml布局中像这样设置它:

<EditText
    ...
    android:textIsSelectable="true"/>

或者以编程方式实现,像这样:

EditText editText = (EditText) findViewById(R.id.editText);
editText.setTextIsSelectable(true);

对于使用API 10及以下版本的任何人,可以在此处找到hack方法: https://dev59.com/4mUp5IYBdhLWcg3wmIUt#20173020


-1

编辑你的<activity>标签在你的AndroidManifest.xml文件中,并添加这个属性:android:windowSoftInputMode="stateAlwaysHidden",请参见http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft

只需添加此属性并删除所有其他奇怪的东西,即可隐藏软键盘。

P.S. 你也可以在运行时启用和禁用此功能。getWindow().getAttributes().softInputMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN;


1
抱歉,但它不起作用,键盘仍然每次都显示。 - Will

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接