首先我要说我在SO上已经阅读了类似的问题和答案,这个问题基本上是this question和其他许多问题的重复,但这些问题的答案并不像我想要的那样有效它
问题:
以编程方式在我的EditText上设置长度过滤器,如下所示:
editText.setFilters(new InputFilter[]{new LengthFilter(10)} );
它唯一能做的就是隐藏EditText中超出限制的文本。它仍然显示建议框中的长(无限制)文本,我必须删除(退格)每个字母,然后才能删除EditText中显示的内容。
建议的解决方案:
将InputType设置为textFilter
。
我以编程方式做到了这一点:
editText.setInputType( InputType.TYPE_TEXT_VARIATION_FILTER );
它隐藏了建议,但无限制文本仍然存在,我仍然需要使用退格键删除不应出现的字母。
将InputType设置为textNoSuggestions|textVisiblePassword
。
我以编程方式执行此操作(必须添加TYPE_CLASS_TEXT
,否则无效):
editText.setInputType( InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD );
这个确实有效,但问题是停止“手势输入”并将字体更改为等宽字体。
更好的解决方案?
正如您所看到的,这两种方法实际上并没有其他问题。有没有其他方法可以做到这一点我错过了。如果我想保持手势输入和建议,我应该使用TextWatcher
吗?
答案 0 :(得分:1)
我最终使用的是TextWatcher。我不确定这是否是最好的方法,但它确实适用于建议,它不会关闭手势输入或更改字体样式。这就是我的做法(我对Android很新,所以如果需要改进,请随时告诉我)。
我在评论中添加了一个例子来澄清发生了什么。
制作这些全局变量:
string V1
1: A 1|1|1
2: B 1|1
3: C 1
然后创建TextWatcher并将其添加到EditText
private boolean mWatcherIsBlocked = false;
private String mBeforeChange;
private String mFilteredString;
private int mCursorPosition = 0;