第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

Android 輸入金額限制,各種限制~

標簽:
Android

  小菜最近因工作需要做一个支付金额对话框的小模块,技术很浅显,遇到几个小坑,分享给大家~

webp

需求

小菜遇到的坑之一:

    其他页面中获取到的金额需要保存两位小数,本来我打算直接用 String 转为 double 类型,但是遇到保存精度问题(String=19.99 ->Double=19.98),所以借鉴BigDecimal 方式,如图:

webp

String->Double精度转换

小菜遇到的坑之二:

    只可保留两位小数,即有两位小数后再输入不显示;若先输入一个长度,例如1234,移动光标,再在1234之间点小数点,只可有12.34或123.4或1234.而不可是1.234

小菜遇到的坑之三:

    时时判断输入金额不可大于10000,自己用了一个很low的方法:

webp

时时判断金额

直接上关键代码吧  (依旧很low,仅供借鉴)

final EditText amountEt = ButterKnife.findById(view, R.id.pay_view_amount_tv);
Double amountDouble = Double.parseDouble(amount);
BigDecimal bignum = new BigDecimal(amountDouble);
amountEt.setText(bignum.setScale(2, BigDecimal.ROUND_HALF_UP) + "");
amountEt.setFilters(new InputFilter[]{new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        String sourceText = source.toString();
        String destText = dest.toString();
         //验证删除等按键
        if (TextUtils.isEmpty(sourceText)) {
                  return "";
        }
        mPattern = Pattern.compile("([0-9]|\\.)*");
        Matcher matcher = mPattern.matcher(source);
        // 已经输入小数点的情况下,只能输入数字
        if (destText.contains(".")) {
                if (!matcher.matches()) {    return "";      } else {
                          if (".".equals(source)) {  //只能输入一个小数点
                                   return "";
                          }
                 }
         double sumText = Double.parseDouble(destText + sourceText);
        if (sumText > 10000) {      return dest.subSequence(dstart, dend);      }
        //验证小数点精度,保证小数点后只能输入2位
       int index = destText.indexOf(".");
       int length = dend - index;
       if (dest.toString() != null && dest.toString().length() > 0 && dest.toString().contains(".")) {
              String[] amoArr = (dest.toString()).split("\\.");
              int indexPoint = dest.toString().indexOf(".");
             if (dstart <= indexPoint) {
                     if (dend > 0) {
                              String temp = amoArr[0].substring(0, dend - 1) + sourceText + amoArr[0].substring(dend - 1, amoArr[0].length());
                              if (Double.parseDouble(temp) > 10000) {       return "";        }
                   }
          } else if (amoArr.length > 1 && amoArr[amoArr.length - 1].length() >= 2) {     return "";     }
    }
     if (length > 10) {      return dest.subSequence(dstart, dend);     }
     } else { // 还没有输入小数点.的情况
              if (source.equals(".") && dest.toString().length() == 0) {     return "0.";    } else {
             if (dest.toString() != null && dest.toString().length() > 0) {
                       double sumDou = Double.parseDouble(dest.toString());
                       if (sumDou > 10000) {       return "";     }
              }
       String[] amoArr = (dest.toString()).split("\\.");
      int indexPoint = dest.toString().indexOf(".");
if (dstart <= indexPoint) {
if (dest.toString() != null && dest.toString().length() > 0) {
double sumDou = Double.parseDouble(dest.toString());
if (sumDou > 10000) {
return dest.subSequence(dstart, dend);
}
}
} else if (amoArr.length > 1 && amoArr[amoArr.length - 1].length() >= 2) {
return "";
} else if (source.equals(".") && dest.toString().length() - dstart > 2) {
return "";
}
}
}
if ((destText + sourceText).length() > 10) {
return dest.subSequence(dstart, dend);
}
//验证输入金额的大小
double sumText = Double.parseDouble(destText + sourceText);
if (sumText > 10000) {
return dest.subSequence(dstart, dend);
}
return dest.subSequence(dstart, dend) + sourceText;
}
}});
// 关闭赞赏提示对话框
ImageView imgClose = ButterKnife.findById(view, R.id.pay_view_close_iv);
imgClose.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
             materialDialog.dismiss();
       }
});
// 确定赞赏
TextView tvPaySure = ButterKnife.findById(view, R.id.pay_view_sure_tv);
tvPaySure.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
amount = amountEt.getText().toString().trim();
if (!StringUtils.isBlank(amount)) {
if (amount.contains(",")) {
amount.replaceAll("\\,", "");
String[] amoArr = amount.split("\\,");
String tempAmoStr = "";
for (String i : amoArr) {
tempAmoStr = tempAmoStr + i;
}
amount = tempAmoStr;
}
double tempAmo = Double.valueOf(amount);
if (tempAmo <= 0.00) {
ToastUtils.showShort(mContext, "请输入一定金额");
} else if (tempAmo > 0.00 && tempAmo <= 9999.99) {
materialDialog.dismiss();
if (getAccountInfo() != null) {
payCommon();
} else {
startActivity(new Intent(mContext, LoginActivity.class));
}
} else {
ToastUtils.showShort(mContext, "不要超过一万");
}
} else {
ToastUtils.showShort(mContext, "请输入一定金额");
}
}
});
// 取消赞赏
TextView tvPayCancel = ButterKnife.findById(view, R.id.pay_view_cancel_tv);
tvPayCancel.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
              materialDialog.dismiss();
       }
});

webp

效果图



作者:老菜和尚


點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
移動開發(fā)工程師
手記
粉絲
168
獲贊與收藏
165

關(guān)注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消