android格式的edittext,每4个字符后显示空格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android格式的edittext,每4个字符后显示空格相关的知识,希望对你有一定的参考价值。

android - 我想从用户输入一个数字输入到EditText - 它需要用空格分隔 - 每4个字符。示例:123456781234 - > 1234 5678 1234

这仅用于视觉目的。但是我需要没有空格的字符串以供进一步使用。

我能做到这一点最简单的方法是什么?

答案

你需要使用TextWatcher来实现视觉目的空间。

并使用空间逻辑的任何简单拆分字符串将其连接回来或每个字符明智地循环整个字符串并从字符串中消除(char) 32

另一答案

这是信用卡的edittext? 首先创建计数变量

int count = 0;

然后把它放在你的oncreate(活动)/ onviewcreated(片段)

    ccEditText.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) 

        

        @Override
        public void afterTextChanged(Editable s) 
            if (count <= ccEditText.getText().toString().length()
                    &&(ccEditText.getText().toString().length()==4
                    ||ccEditText.getText().toString().length()==9
                        ||ccEditText.getText().toString().length()==14))
                ccEditText.setText(ccEditText.getText().toString()+" ");
                int pos = ccEditText.getText().length();
                ccEditText.setSelection(pos);
            else if (count >= ccEditText.getText().toString().length()
                    &&(ccEditText.getText().toString().length()==4
                    ||ccEditText.getText().toString().length()==9
                    ||ccEditText.getText().toString().length()==14))
                ccEditText.setText(ccEditText.getText().toString().substring(0,ccEditText.getText().toString().length()-1));
                int pos = ccEditText.getText().length();
                ccEditText.setSelection(pos);
            
            count = ccEditText.getText().toString().length();
        
    );
另一答案

正如@waqas指出的那样,如果您的目标是在用户键入数字时实现这一点,则需要使用TextWatcher。这是一种可以实现空间的潜在方式:

StringBuilder s;
s = new StringBuilder(yourTxtView.getText().toString());

for(int i = 4; i < s.length(); i += 5)
    s.insert(i, " ");

yourTxtView.setText(s.toString());

每当你需要获得没有空格的String时,请执行以下操作:

String str = yourTxtView.getText().toString().replace(" ", "");
另一答案

文本格式为000 000 0000

android edittext textwatcher format phone number like xxx-xxx-xx-xx

public class PhoneNumberTextWatcher implements TextWatcher 

private static final String TAG = PhoneNumberTextWatcher.class
        .getSimpleName();
private EditText edTxt;
private boolean isDelete;

public PhoneNumberTextWatcher(EditText edTxtPhone) 
    this.edTxt = edTxtPhone;
    edTxt.setOnKeyListener(new View.OnKeyListener() 

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) 
            if (keyCode == KeyEvent.KEYCODE_DEL) 
                isDelete = true;
            
            return false;
        
    );


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


public void beforeTextChanged(CharSequence s, int start, int count,
                              int after) 


public void afterTextChanged(Editable s) 

    if (isDelete) 
        isDelete = false;
        return;
    
    String val = s.toString();
    String a = "";
    String b = "";
    String c = "";
    if (val != null && val.length() > 0) 
        val = val.replace(" ", "");
        if (val.length() >= 3) 
            a = val.substring(0, 3);
         else if (val.length() < 3) 
            a = val.substring(0, val.length());
        
        if (val.length() >= 6) 
            b = val.substring(3, 6);
            c = val.substring(6, val.length());
         else if (val.length() > 3 && val.length() < 6) 
            b = val.substring(3, val.length());
        
        StringBuffer stringBuffer = new StringBuffer();
        if (a != null && a.length() > 0) 
            stringBuffer.append(a);
            if (a.length() == 3) 
                stringBuffer.append(" ");
            
        
        if (b != null && b.length() > 0) 
            stringBuffer.append(b);
            if (b.length() == 3) 
                stringBuffer.append(" ");
            
        
        if (c != null && c.length() > 0) 
            stringBuffer.append(c);
        
        edTxt.removeTextChangedListener(this);
        edTxt.setText(stringBuffer.toString());
        edTxt.setSelection(edTxt.getText().toString().length());
        edTxt.addTextChangedListener(this);
     else 
        edTxt.removeTextChangedListener(this);
        edTxt.setText("");
        edTxt.addTextChangedListener(this);
    



另一答案

这是一个小帮助功能。对于你的例子,你可以用它来调用它

addPadding(" ", "123456781234", 4);

/**
 * @brief Insert arbitrary string at regular interval into another string 
 * 
 * @param t String to insert every 'num' characters
 * @param s String to format
 * @param num Group size
 * @return
 */
private String addPadding(String t, String s, int num) 
    StringBuilder retVal;

    if (null == s || 0 >= num) 
        throw new IllegalArgumentException("Don't be silly");
    

    if (s.length() <= num) 
        //String to small, do nothing
        return s;
    

    retVal = new StringBuilder(s);

    for(int i = retVal.length(); i > 0; i -= num)
        retVal.insert(i, t);
    
    return retVal.toString();

另一答案

在打字时更改实时文本是一些困难。我们应该处理以下问题。

一个。光标位置b。我们应该允许用户删除输入的文本。

以下代码处理这两个问题。

  1. 将TextWatcher添加到EditText,并从“afterTextchanged()”获取文本并编写逻辑 String str =“”; int strOldlen = 0; @Override public void afterTextChanged(Editable s) str = edtAadharNumber.getText().toString(); int strLen = str.length(); if(strOldlen<strLen) if (strLen > 0) if (strLen == 4 || strLen == 9) str=str+" "; edtAadharNumber.setText(str); edtAadharNumber.setSelection(edtAadharNumber.getText().length()); else if(strLen==5) if(!str.contains(" ")) String tempStr=str.substring(0,strLen-1); tempStr +=" "+str.substring(strLen-1,strLen); edtAadharNumber.setText(tempStr); edtAadharNumber.setSelection(edtAadharNumber.getText().length()); if(strLen==10) if(str.lastIndexOf(" ")!=9) String tempStr=str.substring(0,strLen-1); tempStr +=" "+str.substring(strLen-1,strLen); edtAadharNumber.setText(tempStr); edtAadharNumber.setSelection(edtAadharNumber.getText().length()); strOldlen = strLen; else return; else strOldlen = strLen; Log.i("MainActivity ","keyDel is Pressed ::: strLen : "+strLen+"\n old Str Len : "+strOldlen);
  2. 在这里,我试图为每四个字符添加空间。添加

    以上是关于android格式的edittext,每4个字符后显示空格的主要内容,如果未能解决你的问题,请参考以下文章

    Android字数限制的EditText实现方案研究

    从android中的edittext框中获取XXX-XXX-XXXX格式的电话号码

    EditText 只接受几个字符

    android EditText输入文字 数字时 里面的图片文字怎么消失 用的是哪个属性?

    Android ems属性设置后没效果,edittext中设置了ems 10,输入时还是能输入无限

    Android——Activity恢复用户用EditText输入的数据