我需要在EditText中输入文本(数字),我想将数字组除以4位数。
如果我输入000000000000
我希望看到类似0000 0000 0000
的内容。
我的EditText:
@NotEmpty
@InjectView(R.id.paymentCode)
EditText paymentCodeField;
...
paymentCodeField.setOnTouchListener(eventHandler);
...
我认为它需要听众,但我不知道它是怎么做的。
我试过下面的代码
paymentCodeField.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
}
});
但我不知道如何使用它。
答案 0 :(得分:2)
获得它的一种方法是创建一个面具,但是android不会帮助我们达到这个目的。
您可以实现自己的蒙版,也可以使用库。
https://github.com/toshikurauchi/MaskedEditText/tree/master/MaskedEditText
<br.com.sapereaude.maskedEditText.MaskedEditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
mask:mask="#### #### ####"
/>
答案 1 :(得分:1)
1。添加count
个全局变量来计算输入char
的数量。
2。在count
内更新onTextChanged()
并在afterTextChanged()
内添加检查。
3。如果计数等于4
,则将space
添加到当前可编辑的text
并将其设置为EditText
并更改{ {1}}持续使用cursor
方法的位置。
4。最后,为下一个输入留下setSelection()
值。
以下是工作代码:
count
<强>输出:强>
希望这会有所帮助〜
答案 2 :(得分:0)
试试这个:这是电话号码
_edtphonenumber=(EditText)findViewById(R.id.editText_phonenumber);
_edtphonenumber.setTypeface(trajan_pro_regular);
_edtphonenumber.addTextChangedListener(new TextWatcher() {
private boolean mFormatting; // this is a flag which prevents the stack overflow.
private int mAfter;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// nothing to do here..
}
//called before the text is changed...
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//nothing to do here...
mAfter = after; // flag to detect backspace..
}
@Override
public void afterTextChanged(Editable s) {
// Make sure to ignore calls to afterTextChanged caused by the work done below
if (!mFormatting) {
mFormatting = true;
// using US formatting...
if(mAfter!=0) // in case back space ain't clicked...
PhoneNumberUtils.formatNumber(s,PhoneNumberUtils.getFormatTypeForLocale(Locale.US));
mFormatting = false;
}
}
});
答案 3 :(得分:0)
您应该将代码写入beforeTextChanged
paymentCodeField.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (charSequence.length() % 4 == 0) paymentCodeField.setText(charSequence.toString() + " ");
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
}
});
您可以自定义输入编辑文本,它会帮助您!!
答案 4 :(得分:0)
更改文本后,替换所有空格并在请求位置插入空格
paymentCodeField.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) {
s.toString().replace(" ","");
if(s.toString().length()>4 && s.toString().charAt(4)!=' ')
s.insert(4," ");
if(s.toString().length()>9 && s.toString().charAt(9)!=' ')
s.insert(9," ");
}
});