如何禁用软键盘上的“建议”显示

59

我希望在使用我的应用程序时(仅在特定的Activities中)关闭软/虚拟键盘上显示“建议单词”的功能。对于默认的Android键盘,可以在“设置”下找到它(在“单词建议设置”下)。

是否有一种方法可以在您的应用程序中禁用它,而不需要用户手动执行此操作? 我基本上希望用户在输入单词时不提供任何提示。

谢谢!


如何在EditText中关闭建议? - bancer
10个回答

67

在开发2.0+版本时,通常的方法是设置 android:inputType="textNoSuggestions" (参考)。不幸的是,在HTC Desire 2.2(可能也包括其他HTC Sense设备)上仍然会显示建议。
使用 android:inputType="textVisiblePassword" 也无济于事,因为HTC的软键盘不允许您切换语言。
所以我坚持使用 android:inputType="textFilter" 来禁用建议。


1
我还没有尝试使用"android:inputType="textFilter"",但我也可以确认,在HTC Hense上使用多行EditText控件(使用带有2.1 ROM的HTC Hero)时,"android:inputType="textVisiblePassword""不起作用。 当EditText不是多行时,它确实有效。谢谢! - Thira
对于HTC Desire x,“android:inputType =“textFilter”有效。谢谢。 - alicanbatur
3
禁用表情符号,我无法使用“textVisiblePassword”。我已经通过添加android:inputType="textNoSuggestions"和android:privateImeOptions="nm"(nm:无麦克风)来移除建议。 - fingerup
1
对我来说不起作用。有效的是@AmeyaPandilwar的答案:android:inputType="textNoSuggestions|textVisiblePassword" - shoe
1
这个简单的函数怎么会被如此愚蠢地实现呢。 - Vincent

35

您可以通过在XML中添加以下行来禁用软键盘上的建议:

android:inputType="textNoSuggestions"

然而根据这篇文章所述,它可能受IME(键盘)的支持,也可能不被支持。

如果出现此问题,以下方法肯定有效 -


android:inputType="textNoSuggestions|textVisiblePassword"

同样适用于三星Galaxy Tab 4(Android 4.4.2)。 - Christian Schulzendorff

13

这个方法对我来说很有效,即使在安装了2.2的HTC手机上,使用原始键盘也能正常运行。

final EditText et = (EditText) findViewById(R.id.SearchText);
et.setInputType(et.getInputType()
    | EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS
    | EditorInfo.TYPE_TEXT_VARIATION_FILTER);

2
我想补充一个我遇到的问题。将这些标志与现有的inputType进行OR运算可能不起作用。在我的情况下,在三星Galaxy SIII上运行4.04时,当它被膨胀时,现有的inputType是EditorInfo.TYPE_CLASS_TEXT。将附加标志OR到现有标志中并没有阻止建议。但是,如果我将inputType设置为EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS,那么就可以成功地防止建议:et.setInputType(EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS);希望这可以帮助到你。 - Craig B

13

在我的运行Nougat的6P上,什么都不起作用。尽管它是空的,但建议栏因为右侧有麦克风图标而保持显示。 为了摆脱这个问题,我使用了fingerup在评论中提供的建议,它起作用了! 因此,我决定写一个真正的答案,以便人们不会错过它。 总结一下,这是我所用的:

    android:inputType="textNoSuggestions|textFilter|textVisiblePassword"
    android:privateImeOptions="nm"

inputType="textNoSuggestions|textFilter|textVisiblePassword"可以防止推荐内容,而privateImeOptions="nm"(代表“无麦克风”)可以防止输入栏出现,因为它仍然会出现麦克风按钮。
因此,必须同时使用这两个属性,因为如果你只指定了没有麦克风,那么输入栏仍会显示推荐内容。
再次感谢fingerup提供的“nm技巧”。;)


对于删除行建议... tns - FlipNovid

6

我在使用三星设备时遇到了同样的问题:

android:inputType="textNoSuggestions|textFilter|textVisiblePassword"

只有将inputType设置为password并且visiblePassword工作后,才能正常使用:

android:inputType="textPassword|textVisiblePassword"

6
我知道有两种方法可以禁用自动完成。一种方法是通过在布局xml中设置android:inputType="textVisiblePassword"来通过XML实现。另一种方法是通过以下代码实现:
EdtiText editTextBox = findViewById(R.id.myEditTextView);
editTextBox.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

4
不能这样禁用密码字段的建议。最好使用EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS。 - Vadym Stetsiak

2
希望这对你有用,
editText.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES|InputType.TYPE_TEXT_FLAG_MULTI_LINE|InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

1

android:inputType="textPhonetic" 可以在 Android 1.6 上隐藏软键盘的建议。


1
使用android:inputType="textVisiblePassword"

1
感谢您对Stack Overflow社区做出贡献的兴趣。这个问题已经有很多答案了,其中一个答案已经得到社区广泛验证。您确定您的方法之前没有被提到过吗?如果是这样的话,能否解释一下您的方法与众不同的地方,在什么情况下您的方法可能更好,并且为什么您认为之前的答案不够满意。您可以编辑您的回答并提供解释吗? - Jeremy Caney

0

如果在 Activity 中使用 InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS,它会正常工作。 但如果是在 DialogFragment 中使用,则应该将 InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS 放置在以下的 onActivityCreated() 处理程序中:

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        EditText editTextUsername =  (EditText)dialogView.findViewById(R.id.txtUsername);
        editTextUsername.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
}

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