在我的应用程序中,我有一个EditText,其默认输入类型设置为android:inputType="textPassword"默认。它的右侧有一个复选框,选中该复选框时,将该编辑文本的输入类型更改为普通纯文本。它的代码是
password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
我的问题是,当复选框未选中时,它应该再次设置输入类型为密码。我用过-
password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
但是,编辑文本中的文本仍然可见。令人惊讶的是,当我改变方向时,它会自动将输入类型设置为PASSWORD,其中的文本是项目符号(显示为密码)。
有办法实现吗?
另一个使用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
会给出相同的结果,但更短的单词。
在寻找Visual Studio / Xamarin的类似解决方案时,我看到了这个帖子。下面是我使用Xamarin的方法。注意,这个实现在模式切换时保留type_text_flag_no_recommendations标志。
EditText et = FindViewById<EditText>(Resource.Id.ET);
显示字符:
et.InputType = Android.Text.InputTypes.TextVariationVisiblePassword | android . text . inputtypes . textflagnosuggestion;
隐藏字符:
et.InputType = Android.Text.InputTypes.TextVariationPassword | Android.Text.InputTypes.ClassText;
将位置设置为结束:
int position = et.Text.Length;
et.SetSelection(位置,位置);
另一个使用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
会给出相同的结果,但更短的单词。