Android Edittext,可自动检测信用卡类型

时间:2015-02-04 05:40:23

标签: android autocomplete android-edittext

我正在处理Android中的付款选项,通过选择使用信用卡付款,一些用户可能会错误地为其他信用卡号码选择不同的信用卡类型,所以我决定去寻找此问题根据输入的数字自动检测卡片类型

我发现Flipkart在他们的Android应用程序中已经有了这个,在这里我附加了这个功能,

androidedittext

如何在改变卡片类型的同时进行动画制作?

我知道要创建一个文本观察器,并根据输入更改带有EditText的drawableRight图像的卡片类型。

但是需要在drawableRight上做一些动画。

帮助赞赏..!

3 个答案:

答案 0 :(得分:6)

在上述答案和建议的帮助下,我已经取得了成果,

以下是解决方案:

为正则表达式创建一个函数

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);
            }
        }
    });

谢谢..

答案 1 :(得分:1)

您将在输入时观看文本,检查前几位数字以匹配此处找到的代码:

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;
...

答案 2 :(得分:0)

没有本机功能。您必须在TextWatcher上设置EditText课程。它的作用是在你的字段上设置一个监听器,当你输入它时,它会给你检查输入的方法。

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.

            }


   });