我在我的布局中使用TextInputLayout
作为密码字段。当我按下密码切换按钮时,一切正常工作文件和密码并且正确切换。每当我点击密码切换按钮时,内容都会在普通模式和密码模式之间切换。
但我想知道是否可以更改显示密码模式以保持按下切换密码按钮而不是点击。这意味着只要我按下密码切换按钮,我就会看到简单的内容,当我发布按钮时,内容会变回密码模式。你知道这是否可能吗?
更新
如果将其添加到布局中:
<android.support.design.widget.TextInputLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/pin_hint"
app:passwordToggleEnabled="true"
app:passwordToggleDrawable="@drawable/password_visibility_eye"
app:hintEnabled="true"
app:hintAnimationEnabled="true"
app:errorEnabled="true">
<android.support.design.widget.TextInputEditText
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:imeOptions="actionDone"
android:maxLength="16"/>
</android.support.design.widget.TextInputLayout>
并将此drawable用作password_visibility_eye.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_visibility_on" android:state_pressed="true" android:state_checked="true" />
<item android:drawable="@drawable/ic_visibility_on" android:state_pressed="true" />
<item android:drawable="@drawable/ic_visibility_on" android:state_checked="true" />
<item android:drawable="@drawable/ic_visibility_off" />
</selector>
您可以单击眼睛按钮,在布局编辑中切换普通模式和密码模式(无需代码)。我希望将此行为更改为显示密码,同时保持切换密码。
答案 0 :(得分:0)
您可以在切换按钮上使用OnTouchListener。
// this goes wherever you setup your button listener:
button.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
//here your onPressed state
} else if (event.getAction() == MotionEvent.ACTION_UP) {
//here your onReleased state
}
return true;
}
});
答案 1 :(得分:0)
当然。代码可以做任何事情。
做一些像:
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, android.view.MotionEvent event) {
if (event.equals(MotionEvent.ACTION_DOWN)) {
// enable it
}
if (event.equals(MotionEvent.ACTION_UP)) {
// disable it
}
return false;
}
});