将Android EditText格式化为特定模式

时间:2013-04-13 01:41:30

标签: android android-edittext

我需要用户根据此特定模式在EditText中输入文本:

123.456-7890-123.456

用户可以输入任意数量的整数,因此他们也可以输入123.456-7

我不希望用户输入。或 - 只是数字,如输入掩码。

此外,数字键盘只能显示。

我已经广泛搜索了StackOverflow并且已经看过使用InputFilter,ChangedListener,TextWatcher的示例但是没有发现任何类似于我正在尝试做的事情。我尝试了各种各样的实现,但是我没有经验,所以我可能忽略了一些东西。

欢迎任何建议。

4 个答案:

答案 0 :(得分:0)

你将不得不使用TextWatcher和正则表达式模式匹配器来完成你想要做的事情。

这个答案应该有用:Android AutoCompleteTextView with Regular Expression?

答案 1 :(得分:0)

您可以创建自己的实现InputFilter的类。然后你将按如下方式应用它:

MyInputFilter filter = new MyInputFilter(...);
editText.setFilters(new InputFilter[]{filter});

请参阅有关InputFilter如何工作的文档,然后参考Android中使用的一些InputFilter的源代码,了解如何实现它们的一些想法。

答案 2 :(得分:0)

在尝试实现InputFilter或正则表达式失败后,我选择了一些更直接的东西:

public void onTextChanged(CharSequence s, int start, int before, int count) { 
    String a = "";
    String str = id.getText().toString(); 
    String replaced = str.replaceAll(Pattern.quote("."),""); 
    replaced = replaced.replaceAll(Pattern.quote("-"),"");
                char[] id_char = replaced.toCharArray();
                int id_len = replaced.length();
    for(int i = 0; i < id_len; i++) {
                    if(i == 2 || i == 12) {
                        a += id_char[i] + ".";                      
                    }
                    else if (i == 5 || i == 9) {
                        a += id_char[i] + "-";
                    }
                    else a += id_char[i];
                }
    id.removeTextChangedListener(this);
    id.setText(a);
    if(before > 0) id.setSelection(start);
    else id.setSelection(a.length());
    id.addTextChangedListener(this);                

}

我不知道这是否是最佳方法,但确实有效。我还没有解决的一个问题是如何在用户删除或插入数字后处理光标放置。如果用户将光标插入EditText中的某个位置并输入新数字,则光标将跳转到EditText的末尾。我希望光标保持原样。另一个问题是,如果用户将光标插入EditText数字和退格键以删除数字,则第一个键输入不起作用,而在第二个键上输入数字。我只能猜测这与焦点有什么关系?

答案 3 :(得分:-3)

Use this: https://github.com/alobov/SimpleMaskWatcher.

Just set your mask for this watcher (###.###-####-###.###). It will add special symbols automatically and wont check your input string for being complete. But showing the numeric keyboard you must handle by your own using android:inputType="number" tag for your EditText.