输入2个数字后,在android中输入冒号(:)

时间:2017-05-18 08:44:51

标签: android string addtextchangedlistener

       edtTxt.addTextChangedListener(new TextWatcher() {

           @Override
           public void afterTextChanged(Editable s) {
                if(s.length() != 0 && s.length() == 2){
                    String str = s.toString();
                    str.replaceAll("..(?!$)", "$0:");
                    edtTxt.setText(str);
                  }
           }

           @Override    
           public void beforeTextChanged(CharSequence s, int start,
             int count, int after) {
           }

           @Override    
           public void onTextChanged(CharSequence s, int start,
             int before, int count) {

           }
          });

我需要显示":"在第二个数字之后,例如10:25,最大长度是5个数字,它是edittext。 如果我在此之后开始输入edittext 10":"应该插入10:25应该在edittext中显示。 我试着用上面的逻辑不起作用。谁能帮我。提前致谢

4 个答案:

答案 0 :(得分:1)

在replaceAll之后,您应该将值赋给同一个变量。工作正常..

public void afterTextChanged(Editable s) {
    if(s.length() != 0 && s.length() == 3){
        String str = s.toString();
        str = str.replaceAll("..(?!$)", "$0:");
        edtTxt.setText(str);
        edtTxt.setSelection(edtTxt.getText().length()); //cursor at last position
     }
}

答案 1 :(得分:0)

首先,您忽略str.replaceAll()的结果。该方法返回String

if条件可以简化为s.length() == 2

你正在使用的正则表达式不起作用。

输入2个字符后,这将在EditText中添加冒号

if (s.length() == 2) {
    edtTxt.setText(s.toString() + ":");
}

答案 2 :(得分:0)

Kotlin 和改进版的 @sasikumar's solution

private fun formatInput(clock: Editable?) {
        if (clock.toString().isNotEmpty()
            && clock.toString().contains(":").not()
            && clock.toString().length == 3
        ) {
            var str: String = clock.toString()
            str = str.replace("..(?!$)".toRegex(), "$0:")
            etClock.setText(str)
            etClock.setSelection(etClock.text.length)
        }
    }
etClock.addTextChangedListener(
            afterTextChanged = {
                formatInput(it)
            }
)
etClock.setOnFocusChangeListener { _, hasFocus ->
            if (hasFocus) {
                etClock.setSelection(etClock.text.length)
            }
}
etClock.setOnClickListener {
            etClock.setSelection(etClock.text.length)
        }

对使用的正则表达式的一个很好的解释:https://stackoverflow.com/a/23404646/421467

答案 3 :(得分:0)

就这样吧

editTextTime.addTextChangedListener {
        if(it?.length == 3 && !it.contains(":")){
            it.insert(2,":")
        }
    }

I think the code is clear
if you put 3 number it will add ":" before the 3rd number
and it will check if your 3rd Char it not already :
then it will insert ":" for you