在我的应用程序中,我有一个EditText
,其默认输入类型通过deault设置为android:inputType="textPassword"
。它的右边有一个CheckBox
,选中该复选框时,会将那个EditText的输入类型更改为NORMAL PLAIN TEXT。代码是
password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
我的问题是,当取消选中该复选框时,应再次将输入类型设置为PASSWORD。我已经用-
完成了password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
但是,该edittext中的文本仍然可见。令人惊讶的是,当我更改方向时,它会自动将输入类型设置为PASSWORD,并且其中的文本会显示为项目符号(如密码所示)。
实现这一目标的任何方法?
仅适用于遇到相同问题的人。只需以编程方式向该EditText添加一个额外的属性,就可以完成。
password.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
对于数字密码(pin)。
password.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
此外,请确保光标位于EditText中文本的末尾。因为,当您更改输入类型时,光标将自动设置为起点。因此,我建议使用以下代码:
et_password.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
et_password.setSelection(et_password.getText().length());
使用数据绑定时,可以使用以下代码
<data>
<import type="android.text.InputType"/>
.
.
.
<EditText
android:inputType='@{someViewModel.isMasked ?
(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD) :
InputType.TYPE_CLASS_TEXT }'
[如果使用Kotlin,
password.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
这是图像/按钮显示/隐藏密码的完整onClick处理程序。
已添加密码可见性切换功能以支持库版本24.2.0,使您可以直接从EditText
切换密码,而不需要CheckBox
。
自支持库v24.2.0起。您可以非常轻松地实现]
我对Visual Studio / Xamarin的类似解决方案的搜索将我带到了这个话题。以下是Xamarin对我有用的东西。请注意,在两种模式之间切换时,此实现保留TYPE_TEXT_FLAG_NO_SUGGESTIONS
标志。
某些动态情况holder.edit_pin.setInputType(InputType.TYPE_CLASS_NUMBER);
将无法正常工作,因此最好同时使用这两种方法
在您将setInputType
输入密码字段后,您将获得problem with FONT这是我的显示/隐藏密码而不出现字体问题的解决方案
我将从您的布局中删除android:inputType="textPassword"
。这就是为什么当方向改变时它会切换回密码的原因。因为每次方向更改时,都会重新创建视图。
我更改了复选框上的输入类型,所以在OnCheckedChangeListener
上也这样:
只是对@Rajkiran提供的正确答案的其他评论,您可能要添加
要在密码编辑文本中应用密码可见性时,输入完整的代码。
使用此代码将密码更改为文本,反之亦然
mCbShowPwd.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// checkbox status is changed from uncheck to checked.
if (!isChecked) {
// hide password
mEtPwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
} else {
// show password
mEtPwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}
}
});
有关完整的示例代码,请参考http://www.codeproject.com/Tips/518641/Show-hide-password-in-a-edit-text-view-password-ty
Blockquote
基于我在Kotlin中写的neeraj t和Everton Fernandes Rosario的答案,其中password
是布局中EditText的ID。
password.setInputType(InputType.TYPE_CLASS_TEXT | inputType.TYPE_TEXT_VARIATION_PASSWORD);
上面的方法对我来说并不真正有用。以下答案适用于2.2 sdk。
password.setTransformationMethod(PasswordTransformationMethod.getInstance());
另一个使用ImageView的简单示例,用更少的代码切换可见性,因为单个InputType分配,我们只需要相等运算符:
EditText inputPassword = (EditText) findViewById(R.id.loginPassword);
ImageView inputPasswordShow = (ImageView) findViewById(R.id.imagePasswordShow);
inputPasswordShow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(inputPassword.getInputType() == InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) {
inputPassword.setInputType( InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
}else {
inputPassword.setInputType( InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD );
}
inputPassword.setSelection(inputPassword.getText().length());
}
});
替换:
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
使用:
InputType.TYPE_CLASS_TEXT
将给出相同的结果,但单词较短。
Checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// checkbox status is checked.
if (isChecked) {
//password is visible
PasswordField.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
} else {
//password gets hided
passwordField.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
}
});
buttons.get(2).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if(buttons.get(2).getText().toString().equalsIgnoreCase(getResources().getString(R.string.show))){
editTexts.get(1).setInputType(InputType.TYPE_CLASS_TEXT);
editTexts.get(1).setSelection(editTexts.get(1).getText().length());
buttons.get(2).setText(getResources().getString(R.string.hide));
}else{
editTexts.get(1).setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);
//editTexts.get(1).setTransformationMethod(PasswordTransformationMethod.getInstance());
editTexts.get(1).setSelection(editTexts.get(1).getText().length());
buttons.get(2).setText(getResources().getString(R.string.show));
}
}
});
说明:-我有一个带有默认文本的按钮,如图所示。在onclick事件之后,检查按钮的文本是否显示。如果显示,则更改输入类型,调整光标位置并将新文本设置为隐藏在其中。
[隐藏时...进行相反的操作,即隐藏密码,调整光标并将文本设置为显示。就是这样。它像魅力一样运作。
这对我有用:
mytext.setInputType(InputType.TYPE_CLASS_NUMBER);
使用此代码将密码更改为文本,反之亦然。这段代码非常适合我。试试这个。
EditText paswrd=(EditText)view.findViewById(R.id.paswrd);
CheckBox showpass=(CheckBox)view.findViewById(R.id.showpass);
showpass.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(((CheckBox)v).isChecked()){
paswrd.setInputType(InputType.TYPE_CLASS_TEXT);
}else{
paswrd.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
}
});
对于Kotlin用户: