2016-08-06 3 views
0

Я создал поле ввода Password и button, когда вы нажимаете на кнопку, он показывает пароль в Text Format.Как показать пароль до нажатия кнопки

Проблема в том, что она не скрывает ее снова, я хочу, чтобы пароль отображался до нажатия кнопки, когда пользователь не касался кнопки, он должен вернуться к исходному паролю dotted.

Я написал следующий код, его изменение Dotted password на текст, но не меняя text на dotted-password.

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

Я считаю, что 'ACTION_OUTSIDE' должно быть' ACTION_UP' – Shaishav

+0

'ACTION_UP' также не является меняя что-либо. – Kirmani88

ответ

1

Попробуйте это:

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

Это также не меняет текст на пароль – Kirmani88

+0

@ Kirmani88 change '> =' to '<=' – Shaishav

+0

@ Kirmani88 исправил ошибку в коде выше. – Shaishav

1

Вы можете попробовать этот код

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

// Учитывая tvEmail либо кнопки или TextView, следовательно, приведенный выше код может помочь вам в достижении нужных функций хочу

+0

Вы пробовали код ... –

Смежные вопросы