在Android开发中,EditText
是一个常用的UI组件,用于接收用户输入。如果你想在 EditText
中添加数字分隔符(如千位分隔符),可以通过以下几种方法实现:
TextWatcher
你可以使用 TextWatcher
监听 EditText
的文本变化,并在文本变化时添加分隔符。
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editText);
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) {}
@Override
public void afterTextChanged(Editable s) {
editText.removeTextChangedListener(this);
String cleanString = s.toString().replaceAll("[\\$,]", "");
if (!cleanString.isEmpty()) {
double parsed = Double.parseDouble(cleanString);
String formatted = NumberFormat.getCurrencyInstance().format((parsed / 100));
editText.setText(formatted);
editText.setSelection(formatted.length());
}
editText.addTextChangedListener(this);
}
});
}
}
InputFilter
你也可以使用 InputFilter
来限制输入并添加分隔符。
import android.text.InputFilter;
import android.text.Spanned;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editText);
InputFilter filter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
StringBuilder builder = new StringBuilder(dest);
builder.replace(dstart, dend, source.subSequence(start, end).toString());
String result = formatNumber(builder.toString());
return result.substring(dstart, dstart + (result.length() - dest.length()));
}
};
editText.setFilters(new InputFilter[]{filter});
}
private String formatNumber(String number) {
try {
double parsed = Double.parseDouble(number.replaceAll("[^\\d]", ""));
return NumberFormat.getNumberInstance().format(parsed);
} catch (NumberFormatException e) {
return number;
}
}
}
MaskedEditText
你还可以使用第三方库,如 MaskedEditText
,来简化这个过程。
首先,在 build.gradle
文件中添加依赖:
implementation 'com.github.rtugeek:maskededittext:1.0.6'
然后在布局文件中使用 MaskedEditText
:
<com.github.rtugeek(maskededittext):maskededittext
android:id="@+id/maskedEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:mask="###,###.##" />
TextWatcher
的实现来解决。通过上述方法,你可以在 EditText
中有效地添加数字分隔符,提升应用的交互体验。
领取专属 10元无门槛券
手把手带您无忧上云