自定义EditText字符串格式化

5
我搜索了所有与我的问题类似的问题,但都没有解决。我的问题是:
我想在输入时在EditText中格式化一个字符串。 格式如下(它始终是19位数字):
012345 01 0123456789 0
正如您所看到的,我希望在用户输入时根据需要添加空格。 我知道我必须使用TextWatcher,但无论我做什么,都无法得到我想要的结果。
编辑:
这是我最后一次尝试的代码:
        @Override
        public void afterTextChanged(Editable s) {
           if(s.length() == 7 || s.length() == 10 || s.length() == 21){
                editText.removeTextChangedListener(this);
                String newValue;
                newValue= s.insert((s.length()-1), " ").toString();
                //Log.d("AFTER",newValue);
                editText.setText(newValue);
                editText.setSelection(newValue.length());
                editText.addTextChangedListener(this);
            }
        }

"但是我做的每件事都没有得到我想要的结果。我们不知道你做了什么。告诉我们你尝试了什么,我们可以找出你做错了什么。" - dymmeh
http://stackoverflow.com/questions/11409979/how-to-set-the-number-format-for-an-edittext - Calvin
@dymmeh 我修改了我的问题,请看一下。 - Aksiom
2个回答

11

这是您需要的内容。

main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<EditText 
    android:id="@+id/editText"   
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:digits="0123456789"
    android:inputType="number" />
</LinearLayout>

MainActivity.java:

public class MainActivity extends Activity {

    int textlength = 0;
     EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


         editText = (EditText)findViewById(R.id.editText);

            editText.addTextChangedListener(new TextWatcher()
            {

             public void afterTextChanged(Editable s)
             {

             }

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

             }

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


              String text = editText.getText().toString();
          textlength = editText.getText().length();

          if(text.endsWith(" "))          
              return;

          if(textlength == 7 || textlength == 10 || textlength == 21)
          {
            editText.setText(new StringBuilder(text).insert(text.length()-1, " ").toString());
              editText.setSelection(editText.getText().length());
          }

             }});

    }
}

通过这种方式,我刚刚成功地在特定间隔之间添加了数字之间的空格。

注意:我为edittext添加了额外的功能,因此只能输入数字,并且默认情况下只会弹出数字键盘。有关用户输入类型的更多信息,请参见此处


我已经使用了 android:inputType="number"。我测试过了,它很好用。删除空格的部分是真正的问题所在。只有一个小问题。当用户将光标设置到不是最后位置的随机位置时,删除部分就无法工作。我会尝试自己解决它,但如果你能试一下,我会更感激。谢谢你的时间 :)。 - Aksiom
4
当我尝试这样做时,会出现堆栈溢出问题,afterTextChanged不停地被调用。 - CodyMace
https://wizpert.com/wizdom/best-way-to-set-the-custom-format-for-edittext - Mehul Jariwala

0

在用户删除字符时,不要忘记添加反向检查,否则它将无法正常工作。因此,在添加空格时需要检查(start!= text.length)。这样,当用户删除时,我们就不会添加空格。


@Aksiom,请检查上面的内容。 - Azizbek Rasulmetov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接