2016-08-06 62 views
0

Ich habe ein Password Eingabefeld und eine button erstellt, wenn Sie auf die Schaltfläche klicken, wird das Passwort in Text Format angezeigt.So zeigen Sie das Passwort an, bis die Taste gedrückt wird

Das Problem ist, dass es es nicht wieder versteckt, ich möchte das Passwort angezeigt werden, bis die Taste gedrückt wird, wenn Benutzer die Schaltfläche berühren, sollte es wieder auf das ursprüngliche Passwort dotted Modus gehen.

Ich habe den folgenden Code geschrieben, Es ändert Dotted password zu Text, aber nicht text zu dotted-password ändern.

tvEmail.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      final int DRAWABLE_RIGHT = 2; 

      if(event.getAction() == MotionEvent.ACTION_DOWN) { 
       if(event.getRawX() >= (tvEmail.getRight() - tvEmail.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) { 
        tvPassword.setInputType(InputType.TYPE_CLASS_TEXT); 
        return true; 
       } 
      }else{ 
       tvPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); 
      } 

      if(event.getAction() == MotionEvent.ACTION_OUTSIDE) { 
       if(event.getRawX() >= (tvEmail.getRight() - tvEmail.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) { 
        tvPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); 
        return true; 
       } 
      } 


      return false; 
     } 
    }); 
+1

möchte ich glaube, Sie 'ACTION_OUTSIDE' sein sollte' ACTION_UP' – Shaishav

+0

'ACTION_UP' ist auch nicht etwas ändern. – Kirmani88

Antwort

1

Try this:

passwordShown = false; 

tvEmail.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      final int DRAWABLE_RIGHT = 2; 

      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       if(event.getRawX() <= (tvEmail.getRight() - tvEmail.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) { 
        tvPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); 
        passwordShown = true; 
        return true; 
       } 
      } 
      else if ((event.getAction() == MotionEvent.ACTION_UP || 
         event.getAction() == MotionEvent.ACTION_CANCEL || 
         event.getAction() == MotionEvent.ACTION_OUTSIDE) && passwordShown) { 
       tvPassword.setInputType(InputType.TYPE_CLASS_TEXT); 
       passwordShown = false; 
       return true; 
      } 

      return false; 
     } 
    }); 
+0

Dies wird auch nicht den Text in dem Kennwort einen Fehler im Code festgelegt oben – Kirmani88

+0

@ Kirmani88 Änderung '> =' auf '<=' – Shaishav

+0

@ Kirmani88 ändern. – Shaishav

1

Sie diesen Code versuchen

tvEmail.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 

       if (event.getAction() == MotionEvent.ACTION_DOWN) 
       { 
        tvPassword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); 
        return true; 
       } 
       else if (event.getAction() == MotionEvent.ACTION_UP) { 
        tvPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); 
        return true; 
       } 
       return false; 
      } 
     }); 

// Unter Berücksichtigung tvEmail ist entweder Knopf oder Textview, damit obige Code kann Ihnen helfen, die Funktionalität, die Sie bei der Erreichung

+0

Haben Sie den Code ausprobiert ... –