android仿微信充值布局,仿微信充值金额输入框-自定义EditText

7

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控件来实现金额输入的逻辑。

android仿微信充值布局

版权声明:除非特别标注,否则均为网络文章,侵权请联系站长删除。

上一篇 基于Java+SpringBoot+Vue+uniapp微信小程序零食商城系统设计和实现

下一篇 仿微信充值金额输入框-自定义EditText