Android 自动检测信用卡类型的 Edittext
Android Edittext with auto detection of credit card type
我正在处理 android 中的付款选项,通过提供使用信用卡付款的选项,一些用户可能会错误地为其他信用卡号选择不同的信用卡类型,所以我决定查看此问题以根据输入的号码自动检测卡类型,
我发现 Flipkart 在他们的 android 应用程序中已经有了这个,我在这里附上这个功能,
如何做到这一点就像改变卡片类型时发生的动画一样?
我知道制作文本观察器并根据输入更改卡片类型,为 EditText 使用 drawableRight 图像。
但是需要在drawableRight上做一些动画。
帮助感谢..!
没有相应的本机功能。您必须在 EditText
上设置 TextWatcher
class。它所做的是在您的字段上设置一个侦听器,并在您键入时为您提供检查输入的方法。
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
//Check your Credit Card Number here.
}
});
您将在输入文本时查看文本,检查前几位数字是否与此处找到的代码相匹配:
http://www.stevemorse.org/ssn/List_of_Bank_Identification_Numbers.html
这可以通过 Murtaza Hussain 指出的 TextWatcher 侦听器来完成。
通过以下方式检查文本:
switch (s.charAt(0)){
case '4':
// show visa symbol
break;
case '5':
// show mastercard symbol
break;
...
在以上答案和建议的帮助下,我已经达到了结果,
解决方法如下:
创建正则表达式函数
public static ArrayList<String> listOfPattern()
{
ArrayList<String> listOfPattern=new ArrayList<String>();
String ptVisa = "^4[0-9]$";
listOfPattern.add(ptVisa);
String ptMasterCard = "^5[1-5]$";
listOfPattern.add(ptMasterCard);
String ptDiscover = "^6(?:011|5[0-9]{2})$";
listOfPattern.add(ptDiscover);
String ptAmeExp = "^3[47]$";
listOfPattern.add(ptAmeExp);
return listOfPattern;
}
Integer[] imageArray = { R.drawable.visa, R.drawable.master, R.drawable.disnet, R.drawable.ae };
在 addTextChangedListener
中使用下面的代码
creditcardnumberedittext.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
String ccNum = s.toString();
if(ccNum.length()>=2)
{
for (int i = 0; i < listOfPattern.size(); i++)
{
if (ccNum.substring(0, 2).matches(listOfPattern.get(i)))
{
creditcardnumberedittext.setCompoundDrawablesWithIntrinsicBounds(0, 0, imageArray[i], 0);
cardtype = String.valueOf(i);
}
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s)
{
if (!creditcardnumberedittext.getText().toString().equalsIgnoreCase(""))
{
for (int i = 0; i < listOfPattern.size(); i++)
{
if (creditcardnumberedittext.getText().toString().matches(listOfPattern.get(i)))
{
creditcardnumberedittext.setCompoundDrawablesWithIntrinsicBounds(0, 0, imageArray[i], 0);
cardtype = String.valueOf(i);
}
}
}
else
{
creditcardnumberedittext.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.allcards, 0);
}
}
});
谢谢..
我正在处理 android 中的付款选项,通过提供使用信用卡付款的选项,一些用户可能会错误地为其他信用卡号选择不同的信用卡类型,所以我决定查看此问题以根据输入的号码自动检测卡类型,
我发现 Flipkart 在他们的 android 应用程序中已经有了这个,我在这里附上这个功能,
如何做到这一点就像改变卡片类型时发生的动画一样?
我知道制作文本观察器并根据输入更改卡片类型,为 EditText 使用 drawableRight 图像。
但是需要在drawableRight上做一些动画。
帮助感谢..!
没有相应的本机功能。您必须在 EditText
上设置 TextWatcher
class。它所做的是在您的字段上设置一个侦听器,并在您键入时为您提供检查输入的方法。
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
//Check your Credit Card Number here.
}
});
您将在输入文本时查看文本,检查前几位数字是否与此处找到的代码相匹配:
http://www.stevemorse.org/ssn/List_of_Bank_Identification_Numbers.html
这可以通过 Murtaza Hussain 指出的 TextWatcher 侦听器来完成。
通过以下方式检查文本:
switch (s.charAt(0)){
case '4':
// show visa symbol
break;
case '5':
// show mastercard symbol
break;
...
在以上答案和建议的帮助下,我已经达到了结果,
解决方法如下:
创建正则表达式函数
public static ArrayList<String> listOfPattern()
{
ArrayList<String> listOfPattern=new ArrayList<String>();
String ptVisa = "^4[0-9]$";
listOfPattern.add(ptVisa);
String ptMasterCard = "^5[1-5]$";
listOfPattern.add(ptMasterCard);
String ptDiscover = "^6(?:011|5[0-9]{2})$";
listOfPattern.add(ptDiscover);
String ptAmeExp = "^3[47]$";
listOfPattern.add(ptAmeExp);
return listOfPattern;
}
Integer[] imageArray = { R.drawable.visa, R.drawable.master, R.drawable.disnet, R.drawable.ae };
在 addTextChangedListener
中使用下面的代码creditcardnumberedittext.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
String ccNum = s.toString();
if(ccNum.length()>=2)
{
for (int i = 0; i < listOfPattern.size(); i++)
{
if (ccNum.substring(0, 2).matches(listOfPattern.get(i)))
{
creditcardnumberedittext.setCompoundDrawablesWithIntrinsicBounds(0, 0, imageArray[i], 0);
cardtype = String.valueOf(i);
}
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s)
{
if (!creditcardnumberedittext.getText().toString().equalsIgnoreCase(""))
{
for (int i = 0; i < listOfPattern.size(); i++)
{
if (creditcardnumberedittext.getText().toString().matches(listOfPattern.get(i)))
{
creditcardnumberedittext.setCompoundDrawablesWithIntrinsicBounds(0, 0, imageArray[i], 0);
cardtype = String.valueOf(i);
}
}
}
else
{
creditcardnumberedittext.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.allcards, 0);
}
}
});
谢谢..