2017-03-18 32 views
-1

我必须格式化编号,因为用户在Edit Text中输入编号。如果用户输入单个数字,则应该出现0,0x。如果用户输入两位数字,则应该出现0,xx。如果三位数然后x,xx。如果四位数然后xx,xx。如果五位数然后xxx,xx。如果六位数然后x.xxx,xx。如果七位数然后xx.xxx,xx。如果八位数然后xxx.xxx,xx。任何人都可以帮我吗?提前致谢。当用户在编辑文本中输入数字时的格式编号

+0

做你想做的所有零接受特定的字符串后? – Mohit

+0

为什么在输入三位数时没有'0'? – Mohit

+0

在x,xx中可以有0个。 –

回答

0

你可以使用addTextChangedListener

editText.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // Write your logic here to parse the text 
      // and format it in the way you want to. 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 
0

您可以尝试如下:

new TextWatcher() { 

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

      if(afterFormat){ 
       afterFormat = false; 
       return; 
      } 
      afterFormat = true; 
      // TODO format digits 
      ...... 
} 
+0

我已经尝试过,但这种方法进入循环和键盘挂起 –

0

你可以通过输入滤波器设置为文本字段实现这一目标。

private InputFilter myFilter = new InputFilter(){ 

    @Override 
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
     //your code to modify the input text. 
     return modified_input; 
    } 
}; 
editText.setFilters(new inputFilterp[]{}) 
0

这是一个方法,通过它可以实现通过addTextChangedListener或类似的东西,即

  1. 监视器文字变化..
  2. 当你得到的字符串,对于迭代它0直到它达到八位数 。

    while (string.length() < 8) { 
        string = "0" + string; 
    } 
    
  3. 所需格式的模式字符串与String.format()

    String.format("%s.%s,%s", string); // pattern you want 
    

因此,这里是全码:

edit.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      text.setText(""); 
     } 
     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
     } 
     @Override 
     public void afterTextChanged(Editable s) { 
      String string = s.toString(); 
      if (string.length() < 8) { 
       while (string.length() < 8) { 
        string = "0" + string; 
       } 
      }    
      text.setText(String.format("%s.%s,%s", string.substring(0, 3), string 
        .substring(3, 6), string.substring(6, 8))); 
     } 
}); 
相关问题