当TextView未聚焦时禁用红色下划线/拼写检查

时间:2016-03-29 00:33:08

标签: android textview

我的TextViews配置如下:

android:inputType="textMultiLine|textImeMultiLine|textAutoCorrect"

在Android 6.0 / Nexus 5上,输入文本时一切正常(自动更正,键入时的建议等等),但是当完成编辑并且TextView不再处于焦点时,任何拼写错误的单词都很难看红色下划线。你怎么摆脱它们?

我已经在Stack Overflow上阅读了this one之类的问题,但添加textNoSuggestions的建议是不可接受的,因为它会删除红色下划线,但在文本视图聚焦时会在您键入时中断自动更正。 / p>

我也尝试在TextView上使用焦点更改侦听器,但它似乎不起作用:

    setOnFocusChangeListener(new TextView.OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                setInputType(EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE | EditorInfo.TYPE_TEXT_FLAG_IME_MULTI_LINE | EditorInfo.TYPE_TEXT_FLAG_AUTO_CORRECT);
            } else {
                setInputType(EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE | EditorInfo.TYPE_TEXT_FLAG_IME_MULTI_LINE);
            }
        }

    });

[更新1] 我意识到我的EditText子类在构造函数中调用了setOnFocusChangeListener()(我验证了这个工作原理),并没有触发对{{}的调用每当用户在文本视图中开始或结束编辑文本时(这意味着当键盘显示或隐藏时)。

[更新2] 我想为什么onFocusChange()没有被调用:原来应用程序中有另一个地方在同一个TextView上调用了onFocusChange() ,压倒它。它现在可以使用了,但是在未对焦时调用setOnFocusChangeListener()取消设置setInputType()无效:红线仍然可见。确切地说,在XML中设置或不设置TYPE_TEXT_FLAG_NO_SUGGESTIONS会产生影响,但尝试从textNoSuggestions内以编程方式覆盖它无效。

1 个答案:

答案 0 :(得分:1)

您的代码工作正常,只需添加以下行 在您的活动中调用setInputType(EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS)

  

示例代码

tv.setOnFocusChangeListener(new TextView.OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                tv.setInputType(EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE | EditorInfo.TYPE_TEXT_FLAG_IME_MULTI_LINE | EditorInfo.TYPE_TEXT_FLAG_AUTO_CORRECT);
            } else {
                tv.setInputType(EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE | EditorInfo.TYPE_TEXT_FLAG_IME_MULTI_LINE);
            }
        }

    });