【问题标题】:How to show password by using setTransformationMethod(null), yet retain the eye icon如何使用 setTransformationMethod(null) 显示密码,但保留眼睛图标
【发布时间】:2017-04-24 18:15:54
【问题描述】:

目前,我将密码输入文本字段设计如下

<android.support.design.widget.TextInputLayout
    android:layout_marginLeft="@dimen/trading_activity_horizontal_margin"
    android:layout_marginRight="@dimen/trading_activity_horizontal_margin"

    app:hintTextAppearance="@style/TradingWizardTextInputLayout"
    app:passwordToggleEnabled="true"
    android:id="@+id/password_text_input_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
    <android.support.design.widget.TextInputEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/wizard_password"
        android:id="@+id/password_edit_text"

        android:inputType="textPassword"
        android:imeOptions="actionNext|flagNoExtractUi" />
</android.support.design.widget.TextInputLayout>

如下图

但是,在初始阶段,我希望我的密码输入文本字段的输入可见。

这意味着,当密码输入文本字段第一次出现时,它应该是这样的

我试过了

passwordEditText.setTransformationMethod(null)

密码可见。但是,它也会使眼睛图标消失!

如何使用setTransformationMethod(null) 显示密码,但保留眼睛图标?

【问题讨论】:

  • 不。它不会改变任何东西。眼睛图标上仍然有一个对角十字符号,密码仍然不可见。

标签: android


【解决方案1】:

而不是使用

app:passwordToggleEnabled="true"

您可以设置“drawableRight”和 touchListener 来获得相同的效果。 代码将是这样的

XML

<android.support.design.widget.TextInputLayout
                    android:id="@+id/password_text_input"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:hintEnabled="false"
                    android:layout_marginLeft="@dimen/dimen_18"
                    android:layout_marginRight="@dimen/dimen_18">
                    <EditText
                        android:textSize="16sp"
                        android:paddingTop="0dp"
                        android:id="@+id/password_edit_text"
                        android:textColor="@android:color/black"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:drawableRight="@drawable/ic_hide_password"
                        android:maxLines="1"
                        />
                </android.support.design.widget.TextInputLayout>

触摸监听器

public class ShowHidePassword implements View.OnTouchListener{
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        final int DRAWABLE_RIGHT = 2;
        EditText editView = (EditText) v;
        if (event.getAction() == MotionEvent.ACTION_UP) {
            if (event.getRawX() >= (editView.getRight() - editView.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
                editView.requestFocus();
                if(editView.getTransformationMethod() instanceof PasswordTransformationMethod){
                    editView.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                    editView.setSelection(editView.getText().length());
                    editView.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_hide_password, 0);
                }else{
                    editView.setTransformationMethod(PasswordTransformationMethod.getInstance());
                    editView.setSelection(editView.getText().length());
                    editView.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_view_password, 0);
                }
                return true;
            }
        }

        return false;
    }
}

并在您的活动中设置监听器

passwordEditText.setOnTouchListener(new ShowHidePassword());

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 2021-05-18
    • 2021-07-06
    • 2019-10-26
    相关资源
    最近更新 更多