按下按钮时要显示密码,否则应隐藏或点缀。 我已应用以下代码,但它无法正常工作。 任何帮助,将不胜感激。
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;
}
});
答案 0 :(得分:7)
您使用OnTouchListener
为MotionEvent
提供了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提供了一种简单的方法,可以使输入字段包含隐藏字符:EditText
和inputType="textPassword"
。非常简单。但是,如果你需要输入一些冗长而复杂的密码,这可能有点单调乏味:制作类型非常容易,然后你需要再次开始输入密码。
解。 因此,为了使密码输入更容易,我们可以实现一个简单但非常有效的解决方案:在输入字段的右边缘显示一个图标,当您点击图标时 - 键入的密码变为可见,当您抬起手指时 - 它再次显示模糊的人物。简单,有效和安全!
至少有三种明显可行的方法可以实现这一目标: 在布局中编写默认的Android SDK视图,并将行为逻辑放入父片段/活动中 创建一个组合的ViewGroup来封装布局和行为逻辑 创建一个EditText子类,它将在视图的右侧管理自定义drawable
这三种方式对你都有好处。最初我用第一种方式做了几个原因,如: 我不喜欢在没有真正必要性的情况下创建额外的实体。像奥卡姆剃刀校长的东西。 :) 我只需要在一个地方拥有它
当然,如果您需要在不同位置多次使用相同的增强密码视图,请选择第2或第3(最好是因为视图层次结构是平的)选项。
实现。 因此,使用默认Android SDK视图的增强型密码视图的最简单实现可能如下所示:
在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.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);
如果手指在可见性视图内向下,则触摸侦听器应用可见字符模式,并在手指向上或离开可见性视图时应用原始密码模式。我们还要注意光标位置的持久性,这样用户可以随时切换可见性模式而不会丢失当前输入光标位置。
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())