首页 文章

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

提问于
浏览
6

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

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

androidedittext

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

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

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

帮助赞赏..!

3 回答

  • 1

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

    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.
    
                }
    
    
       });
    
  • 1

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

    这是解决方案:

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

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

    谢谢..

  • 6

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

    http://www.stevemorse.org/ssn/List_of_Bank_Identification_Numbers.html

    这可以通过TextWatcher监听器Murtaza Hussain指出来完成 .

    检查文字:

    switch (s.charAt(0)){
    case '4':
        // show visa symbol
        break;
    case '5':
        // show mastercard symbol
        break;
    ...
    

相关问题