android仿微信充值布局,仿微信充值金额输入框-自定义EditText
Android仿微信充值布局
概述
在开发过程中,有时候我们需要在输入框中输入金额,并且输入金额有一定的规则限制。例如:
1. 只能是数字。
2. 第一位只能是数字,不能是小数点,如果第一位是小数点,就默认在小数点前加0,且保留2位小数。
为了实现这些功能,我们需要自定义一个EditText控件来实现金额输入的逻辑。
自定义EditText
首先,我们需要创建一个新的类继承于EditText,这样我们就可以覆盖掉原有的EditText的行为。
```javapublic class MoneyEditText extends EditText {
public MoneyEditText(Context context) {
super(context);
}
public MoneyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MoneyEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
```
添加输入监听器
为了实现金额的输入逻辑,我们需要在EditText中添加一个输入监听器。我们可以使用TextWatcher来实现这个功能。
```javapublic class MoneyEditText extends EditText {
public MoneyEditText(Context context) {
super(context);
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) {
// 在这里实现金额的输入逻辑 }
});
}
public MoneyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
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) {
// 在这里实现金额的输入逻辑 }
});
}
public MoneyEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
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) {
// 在这里实现金额的输入逻辑 }
});
}
}
```
实现金额的输入逻辑
在afterTextChanged方法中,我们可以实现金额的输入逻辑。例如:
* 只能是数字。
* 第一位只能是数字,不能是小数点,如果第一位是小数点,就默认在小数点前加0,且保留2位小数。
```javapublic class MoneyEditText extends EditText {
public MoneyEditText(Context context) {
super(context);
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) {
String text = s.toString();
if (text.contains(".")) {
// 如果第一位是小数点,就默认在小数点前加0,且保留2位小数 text = "0" + text;
} else {
// 只能是数字 text = text.replaceAll("[^d]", "");
}
s.replace(0, s.length(), text);
}
});
}
public MoneyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
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) {
String text = s.toString();
if (text.contains(".")) {
// 如果第一位是小数点,就默认在小数点前加0,且保留2位小数 text = "0" + text;
} else {
// 只能是数字 text = text.replaceAll("[^d]", "");
}
s.replace(0, s.length(), text);
}
});
}
public MoneyEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
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) {
String text = s.toString();
if (text.contains(".")) {
// 如果第一位是小数点,就默认在小数点前加0,且保留2位小数 text = "0" + text;
} else {
// 只能是数字 text = text.replaceAll("[^d]", "");
}
s.replace(0, s.length(), text);
}
});
}
}
```
使用自定义EditText
在布局文件中,我们可以使用自定义的MoneyEditText控件。
```xml android:layout_width="match_parent" android:layout_height="wrap_content" /> ``` 获取输入金额 我们可以通过getEditableText()方法获取输入的金额。 ```javaMoneyEditText et = findViewById(R.id.et_money); String money = et.getEditableText().toString(); ``` 以上就是如何自定义一个EditText控件来实现金额输入的逻辑。