2015-02-04 18 views
5

Mam do czynienia z opcją płatności w Androidzie, dając możliwość dokonania płatności kartą kredytową, niektórzy użytkownicy mogą błędnie wybrać inny typ karty kredytowej dla innego numeru karty kredytowej , więc postanowiłem spojrzeć na ten problem na Automatycznie wykrywa typ karty w oparciu o liczbę weszła,Android Edittext z automatycznym wykrywaniem typu karty kredytowej

znalazłem Flipkart mieć to już w swoim android, tutaj załączam tę funkcjonalność,

androidedittext

jak to zrobić, tak jak w przypadku animacji podczas zmiany karty rodzaj?

Wiem, że robię obserwatora tekstu i na podstawie danych wejściowych, aby zmienić typ karty za pomocą rysowanego obrazu do EditText.

Ale trzeba zrobić animację nad drawableRight.

Pomaga docenić ..!

+0

http://stackoverflow.com/questions/4172242/live-editing-of-users-input/37187857#37187857 – HenryChuang

Odpowiedz

5

Z pomocą powyższych odpowiedzi i sugestii udało mi się osiągnąć wynik,

Oto rozwiązanie:

Utwórz funkcję regex dokonywania

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

użyj poniższego kodu w addTextChang edListener

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

Dzięki ..

1

Nie ma natywnej funkcji. Musisz ustawić klasę TextWatcher na EditText. To, co robi, ustawia słuchacza na twoim polu, a po jego wpisaniu daje ci metodę sprawdzania danych wejściowych.

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. 

      } 


    }); 
+0

Zobacz moją editted słupek – Brendon

+0

że zależy od implementacja, możesz także użyć 'FlipAnimator' do odwrócenia widoków. Ale jeśli szukasz wyłącznie kodu, który jest zły. Spróbuj użyć technik opisanych powyżej. –

+0

Uwaga: Możesz także zdefiniować animację 'SlideUp' i' SlideDown' na 'FlipAnimator' –

1

Byłbyś oglądania tekstu, ponieważ jest to wejście, sprawdzając kilka pierwszych cyfr, aby dopasować kody znaleźć tutaj:

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

Można to zrobić ze słuchaczem TextWatcher Murtaza Hussain ma wskazany.

sprawdzić tekst poprzez:

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

Dzięki za link, który pomaga mi wykonać wyrażenie regularne. – Brendon

Powiązane problemy