如何隐藏和显示android中的按钮点击密码?

时间:2016-12-28 12:20:56

标签: android button ontouchlistener ontouch

按下按钮时要显示密码,否则应隐藏或点缀。        我已应用以下代码,但它无法正常工作。 任何帮助,将不胜感激。

 button.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if(button.isPressed()) {
                upass.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
                return true;
            }
            return true;
        }
   });

6 个答案:

答案 0 :(得分:7)

您使用OnTouchListenerMotionEvent提供了MotionEvent。使用它们!只要你按下它就不需要再次按下按钮inputType = TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_VISIBLE_PASSWORD就在那里。

使用密码MotionEvent.ACTION_UP

显示密码字段

按下按钮时MotionEvent.ACTION_DOWN因此您可以看到文本。 当 button.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { switch ( event.getAction() ) { case MotionEvent.ACTION_UP: editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); break; case MotionEvent.ACTION_DOWN: editText.setInputType(InputType.TYPE_CLASS_TEXT); break; } return true; } }); 保持原样时。

OData

答案 1 :(得分:6)

showhide.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                global.hideKeyboard();

                if(showhide.getText().equals("Hide"))
                {
                    showhide.setText("Show");
                    etPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
                }
                else if(showhide.getText().equals("Show"))
                {
                    showhide.setText("Hide");
                    etPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                }
            }
        });

答案 2 :(得分:1)

增强的密码输入视图:切换密码的可见性。 嘿!我决定在延迟分享有关Android开发的更多内容之后继续写博客。今天让我们从一个简单的开始:密码输入字段。

增强的密码输入。 通常,登录或注册UI表单都有一些密码输入字段。 Android SDK提供了一种简单的方法,可以使输入字段包含隐藏字符:EditTextinputType="textPassword"。非常简单。但是,如果你需要输入一些冗长而复杂的密码,这可能有点单调乏味:制作类型非常容易,然后你需要再次开始输入密码。

解。 因此,为了使密码输入更容易,我们可以实现一个简单但非常有效的解决方案:在输入字段的右边缘显示一个图标,当您点击图标时 - 键入的密码变为可见,当您抬起手指时 - 它再次显示模糊的人物。简单,有效和安全!

至少有三种明显可行的方法可以实现这一目标: 在布局中编写默认的Android SDK视图,并将行为逻辑放入父片段/活动中 创建一个组合的ViewGroup来封装布局和行为逻辑 创建一个EditText子类,它将在视图的右侧管理自定义drawable

这三种方式对你都有好处。最初我用第一种方式做了几个原因,如: 我不喜欢在没有真正必要性的情况下创建额外的实体。像奥卡姆剃刀校长的东西。 :) 我只需要在一个地方拥有它

当然,如果您需要在不同位置多次使用相同的增强密码视图,请选择第2或第3(最好是因为视图层次结构是平的)选项。

实现。 因此,使用默认Android SDK视图的增强型密码视图的最简单实现可能如下所示:

  1. 在XML布局中签名(省略了与填充有关的简单和非主题相关的参数):

    <RelativeLayout
    ...>
    
      <EditText
          android:id="@+id/fragment_login_password"
          android:inputType="textPassword"
      .../>
    
      <ImageView
          android:id="@+id/fragment_login_password_visibility"
          android:layout_alignRight="@+id/fragment_login_password"
          android:clickable="true"
          android:src="@drawable/ic_show_password"
      .../>
    </RelativeLayout> 
    
  2. 在父片段/活动中:

    2.1。对于良好的用户体验,如果存在某些键入的密码值,则添加文本更改的侦听器以显示密码可见性,并将其隐藏为空密码视图:

    mPasswordView.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
    
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }
    
        @Override
        public void afterTextChanged(Editable s) {
            mPasswordVisibilityView.setVisibility(s.length() > 0 ? View.VISIBLE : View.GONE);
        }
    });
    

    2.2。为密码可见性视图设置触摸侦听器以对触摸做出反应

    mPasswordVisibilityView.setOnTouchListener(mPasswordVisibleTouchListener);
    
  3. 如果手指在可见性视图内向下,则触摸侦听器应用可见字符模式,并在手指向上或离开可见性视图时应用原始密码模式。我们还要注意光标位置的持久性,这样用户可以随时切换可见性模式而不会丢失当前输入光标位置。

    private View.OnTouchListener mPasswordVisibleTouchListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            final boolean isOutsideView = event.getX() < 0 ||
                event.getX() > v.getWidth() ||
                event.getY() < 0 ||
                event.getY() > v.getHeight();
    
        // change input type will reset cursor position, so we want to save it
        final int cursor = mPasswordView.getSelectionStart();
    
        if (isOutsideView || MotionEvent.ACTION_UP == event.getAction())
            mPasswordView.setInputType( InputType.TYPE_CLASS_TEXT | 
                                        InputType.TYPE_TEXT_VARIATION_PASSWORD);
        else
            mPasswordView.setInputType( InputType.TYPE_CLASS_TEXT | 
                                        InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
    
            mPasswordView.setSelection(cursor);
            return true;
        }
    };
    

    就是这样!正如我所说,实施起来非常简单,但它大大改善了用户体验!

答案 3 :(得分:1)

你不应该重新发明轮子。使用它:

<android.support.design.widget.TextInputLayout
android:id="@+id/passwordLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:passwordToggleEnabled="true">

<android.support.design.widget.TextInputEditText
    android:id="@+id/password"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textPassword"/>

</android.support.design.widget.TextInputLayout>

属性app:passwordToggleEnabled显示/隐藏您想要的按钮。请注意,您还必须将此字符串添加到应用程序的build.gradle:

compile 'com.android.support:design:25.1.0'

答案 4 :(得分:0)

本作品:

   button.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    upass.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                    return true;
                case MotionEvent.ACTION_UP:
                    upass.setTransformationMethod(PasswordTransformationMethod.getInstance());
                    return true;
            }
            return false;
        }
    });

答案 5 :(得分:0)

在XML中这样做,下面是java代码

(array.Collect())