Android 如何显示密码直到按下按钮

Android 如何显示密码直到按下按钮,android,android-layout,android-edittext,Android,Android Layout,Android Edittext,我已经创建了一个密码输入字段和一个按钮,当您单击该按钮时,它会以文本格式显示密码 问题是,它不会再次隐藏它,我希望在按下按钮之前显示密码,当用户取消触摸按钮时,它应该返回到原始密码虚线模式 我已经编写了以下代码,它将虚线密码更改为文本,但没有将文本更改为虚线密码 tvEmail.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, Moti

我已经创建了一个
密码
输入字段和一个
按钮
,当您单击该按钮时,它会以
文本格式显示密码

问题是,它不会再次隐藏它,我希望在按下按钮之前显示密码,当用户取消触摸按钮时,它应该返回到原始密码
虚线模式

我已经编写了以下代码,它将
虚线密码
更改为文本,但没有将
文本
更改为
虚线密码

 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;
        }
    });
试试这个:

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; 
        } 
    }); 
passwordshow=false;
TveEmail.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
最终int可绘制的_右=2;
if(event.getAction()==MotionEvent.ACTION\u向下){
如果(event.getRawX()尝试以下操作:

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; 
        } 
    }); 
passwordshow=false;
TveEmail.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
最终int可绘制的_右=2;
if(event.getAction()==MotionEvent.ACTION\u向下){
如果(event.getRawX(),您可以尝试以下代码

 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; 
             } 
         }); 
//考虑到TveEmail是按钮或文本视图,因此上述代码可以帮助您实现所需的功能

您可以尝试此代码

 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是按钮或文本视图,因此上述代码可以帮助您实现所需的功能

我相信您的
外部动作
应该是
外部动作
外部动作
也不会改变任何东西。我相信您的
外部动作
应该是
外部动作
外部动作
也没有更改任何内容。这也没有将文本更改为密码。现在只是显示密码,而不是将其转换为密码text@Kirmani88添加了动作事件
ACTION\u CANCEL
ACTION\u OUTSIDE
。这也不是将文本更改为密码。现在只是显示密码,而不是转换密码进入text@Kirmani88添加了动作事件
ACTION\u CANCEL
ACTION\u OUTSIDE