gpt4 book ai didi

android - 想要在 EditText 中格式化数字

转载 作者:搜寻专家 更新时间:2023-11-01 08:40:41 24 4
gpt4 key购买 nike

我想在EditText中对数字形式的输入进行格式化,格式为01-133134-124。我想要第一个 - 在 2 个数字之后然后在 6 个数字之后下一个破折号。我试过了但是每当我因为输入错误而按下删除/退格键时格式停止工作并且在输入 2 个数字后没有破折号或6 个数字。这是代码。其中 Enrollement 是 EditText 字段。

格式:2digitnumber-6dignumber-3dignumber

Enrollement.addTextChangedListener(new TextWatcher() {

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

Enrollement.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_DEL)
keyDel = 1;
return false;
}
});

if (keyDel == 0) {
int len = Enrollement.getText().length();
if (len == 2) {
int leng = Enrollement.getText().length();
if(leng==2) {
Enrollement.setText(Enrollement.getText() + "-");
Enrollement.setSelection(Enrollement.getText().length());
}
} else if (len == 9) {
int leng = Enrollement.getText().length();
if(leng==9) {
Enrollement.setText(Enrollement.getText() + "-");
Enrollement.setSelection(Enrollement.getText().length());
}
}
} else {
keyDel = 0;
}
}

@Override
public void afterTextChanged(Editable arg0) {

}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

}
});

最佳答案

如果您稍微改变一下方法,就会容易得多。在 EditText 中的每一次更改之后,您可能总是在分析字符串的未格式化版本。

试试这个(记得为你的 EditText 设置 android:maxLength="13"):

Enrollement.addTextChangedListener(new TextWatcher() {

final int[] blockLengths = new int[]{2, 6, 3};
String mUnformatted = "";

@Override
public void onTextChanged (CharSequence s,int start, int before, int count){
String unformattedSeq = s.toString().replace("-", "");
if (mUnformatted.length() == unformattedSeq.length()) {
return; //length of text has not changed
}

mUnformatted = unformattedSeq;
//formatting sequence
StringBuilder formatted = new StringBuilder();
int blockIndex = 0;
int currentBlock = 0;
for (int i = 0; i < mUnformatted.length(); ++i) {
if (currentBlock == blockLengths[blockIndex]) {
formatted.append("-");
currentBlock = 0;
blockIndex++;
}
formatted.append(mUnformatted.charAt(i));
currentBlock++;
}

Enrollement.setText(formatted.toString());
Enrollement.setSelection(formatted.length());
}

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

@Override
public void afterTextChanged (Editable s){
}
});

这段代码应该可以正常工作。您只能改进 setSelection 部分(目前,如果您删除 EditText 中间的数字,它会将光标移动到文本末尾)。

关于android - 想要在 EditText 中格式化数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32873680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com