diff --git a/README.md b/README.md index e5457a3fb6bd7670bfc31fc0a0ba62478d361b93..2015cbdc1bded9af9fdbf3c45314bc20a419c960 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,8 @@ ...... } ``` +在sdk5,DevEco Studio2.1 beta3下项目可直接运行 如无法运行,删除项目.gradle,.idea,build,gradle, +build.gradle文件, 并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下 #### 使用说明 @@ -82,57 +84,21 @@ XML中添加自定义控件: 输入控件加入自动检索和格式化功能,并且在输入信息后自动格式化和检索所属信息进行显示: ```java - @Override - public void onTextUpdated(String s, int start, int before, int count) { - if (s.length() >= 24) { - setText(s.substring(0, 23)); - format(s.substring(0, 23)); - } else { - format(s); - } - } - - private void format(String editable) { - if (shouldStopChange) { - shouldStopChange = false; - return; - } - - shouldStopChange = true; - - String str = editable.trim().replaceAll(WHITE_SPACE, ""); - int len = str.length(); - int courPos; - - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < len; i++) { - builder.append(str.charAt(i)); - if (i == 3 || i == 7 || i == 11 || i == 15) { - if (i != len - 1) - builder.append(WHITE_SPACE); - } - } - courPos = builder.length(); - setText(builder.toString()); - if (listener != null) { - if (BankCardUtils.checkBankCard(getBankCardText())) { - char[] ss = getBankCardText().toCharArray(); - listener.success(BankCardUtils.getNameOfBank(ss, 0)); - } else { - listener.failure(); - } - } - } +BandCardEditText editText = (BandCardEditText) findComponentById(ResourceTable.Id_et); + editText.setBankCardListener(new BankCardListener() { + + @Override + public void success(String name) { + tv.setText("所属银行:" + name); + } + + @Override + public void failure() { + tv.setText("所属银行:"); + } + }); ``` -自定义BankCardFormat控件,使用到的主要属性,具体属性如下: - -| name | type | info | -|-------------------------|-----------|--------------------------------------------------------| -| background_element | color | sets the background color | -| text_input_type | integer | set to input content type | - - #### 测试信息 CodeCheck代码测试无异常 diff --git a/entry/src/main/java/com/yuyh/bankcardformat/slice/MainAbilitySlice.java b/entry/src/main/java/com/yuyh/bankcardformat/slice/MainAbilitySlice.java index 2d7ae1d3599b4f214301061fc56f68593b7fdb90..8ddc24cd1bd79966c07c77e86889d0e73090d893 100644 --- a/entry/src/main/java/com/yuyh/bankcardformat/slice/MainAbilitySlice.java +++ b/entry/src/main/java/com/yuyh/bankcardformat/slice/MainAbilitySlice.java @@ -7,8 +7,6 @@ import com.yuyh.bankcardformat.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.Text; -import ohos.hiviewdfx.HiLog; -import ohos.hiviewdfx.HiLogLabel; public class MainAbilitySlice extends AbilitySlice { diff --git a/library/src/main/java/com/example/library/BandCardEditText.java b/library/src/main/java/com/example/library/BandCardEditText.java index a85eee0ebbc807e21caa9c7a1529c32bfc836233..d90c6fd36be454a74632d8d1fec517d08da27830 100644 --- a/library/src/main/java/com/example/library/BandCardEditText.java +++ b/library/src/main/java/com/example/library/BandCardEditText.java @@ -9,9 +9,8 @@ import ohos.app.Context; public class BandCardEditText extends TextField implements Text.TextObserver { + private static final String WHITE_SPACE = " "; private boolean shouldStopChange = false; - private final String WHITE_SPACE = " "; - private BankCardListener listener; public BandCardEditText(Context context) { @@ -57,8 +56,6 @@ public class BandCardEditText extends TextField implements Text.TextObserver { String str = editable.trim().replaceAll(WHITE_SPACE, ""); int len = str.length(); - int courPos; - StringBuilder builder = new StringBuilder(); for (int i = 0; i < len; i++) { builder.append(str.charAt(i)); @@ -67,11 +64,7 @@ public class BandCardEditText extends TextField implements Text.TextObserver { builder.append(WHITE_SPACE); } } - courPos = builder.length(); setText(builder.toString()); - - //setSelection(courPos); - if (listener != null) { if (BankCardUtils.checkBankCard(getBankCardText())) { char[] ss = getBankCardText().toCharArray(); diff --git a/library/src/main/java/com/example/library/BankCardInfo.java b/library/src/main/java/com/example/library/BankCardInfo.java index 8bdeb38ca84a5a00481182dbad6d1d9e8fa5f1f4..ebcb1aa36f3266283b233e401e67ba5f7b6fee0c 100644 --- a/library/src/main/java/com/example/library/BankCardInfo.java +++ b/library/src/main/java/com/example/library/BankCardInfo.java @@ -2,7 +2,7 @@ package com.example.library; public class BankCardInfo { - public final static long[] bankBin = + private static final long[] bankBin = { 102033, 103000, @@ -1066,8 +1066,8 @@ public class BankCardInfo { 984301, 998800, }; - //"发卡行.卡种名称", - public static final String[] bankName = { + // "发卡行.卡种名称", + private static final String[] bankName = { "广东发展银行.广发理财通", "农业银行.金穗借记卡", "昆明农联社.金碧卡", @@ -2130,4 +2130,12 @@ public class BankCardInfo { "上海浦东发展银行.东方卡", "深圳发展银行.发展卡", }; -} + + public long[] getBankBin() { + return bankBin.clone(); + } + + public String[] getBankName() { + return bankName.clone(); + } +} \ No newline at end of file diff --git a/library/src/main/java/com/example/library/BankCardUtils.java b/library/src/main/java/com/example/library/BankCardUtils.java index 6c5e50606d191447999502a3389bd34ba9f29832..6e78f779c61603c37f4d9971aab96bd864387a2e 100644 --- a/library/src/main/java/com/example/library/BankCardUtils.java +++ b/library/src/main/java/com/example/library/BankCardUtils.java @@ -1,9 +1,6 @@ package com.example.library; -import static com.example.library.BankCardInfo.bankBin; -import static com.example.library.BankCardInfo.bankName; - /** * Created by yuyuhang on 2018/1/23. */ @@ -15,22 +12,21 @@ public class BankCardUtils { for (int i = 0; i < 6; i++) { longBin = (longBin * 10) + (charBin[i + offset] - 48); } - - int index = binarySearch(bankBin, longBin); + BankCardInfo info = new BankCardInfo(); + int index = binarySearch(info.getBankBin(), longBin); if (index == -1) { return ""; } - return bankName[index]; + return info.getBankName()[index]; } - //二分查找方法 public static int binarySearch(long[] srcArray, long des) { int low = 0; int high = srcArray.length - 1; while (low <= high) { - int middle = (low + high) / 2; + int middle = avg(low, high); if (des == srcArray[middle]) { return middle; } else if (des < srcArray[middle]) { @@ -42,13 +38,25 @@ public class BankCardUtils { return -1; } + /** + * 计算两数平均数 + * + * @param num1 int + * @param num2 int + * @return int + */ + public static int avg(int num1, int num2) { + return ((num1 & num2) + ((num1 ^ num2) >> 1)); + } + /** * 校验银行卡卡号 + * * @param cardId 银行卡卡号id * @return boolean 是否为空 */ public static boolean checkBankCard(String cardId) { - if (cardId.isEmpty()) + if (cardId.isEmpty()) return false; char bit = getBankCardCheckCode(cardId.substring(0, cardId.length() - 1)); @@ -57,6 +65,7 @@ public class BankCardUtils { /** * 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位 + * * @param nonCheckCodeCardId 不含校验位的银行卡卡号 * @return N/0 是否为空 */