我使用EditText输入密码。 还有一个CheckBox来显示密码。 以下功能是部分:
public void ShowPassword() {
if (cb.isChecked()) {
password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
} else {
password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
}
选中后,会显示密码。 但是当它没有被检查时,它确实显示了星星。 如何修改它以在未选中cb时显示星标?
答案 0 :(得分:60)
我不确切知道具体细节,但这段代码应该有效:
checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(!isChecked) {
password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
} else {
password.setInputType(129);
}
}
});
129
是设置android:inputType="textPassword"
编辑:
在@ user370305的回答中提到,129
是你做的按位或操作的值
password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
答案 1 :(得分:46)
这不是答案,
已经给出并接受了答案..
我只想澄清一下129
password.setInputType(129);
实际上是
password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
<强> '|'不是管道,它是bitwise OR
。它需要两个二进制数,如果其中任何一个相等的值是1,
这与输入类型有何关系:每个InputTypes实际上只是整数。
TYPE_CLASS_TEXT is 1
和TYPE_TEXT_VARIATION_PASSWORD is 128 (or 10000000)
。
对他们执行bitwise OR
:
00000001
10000000
------------
10000001 which is 129.
尝试输入input.setInputType(129);
,您会发现它会起作用。 :)
答案 2 :(得分:15)
我认为你使用的是错误的功能。我这样做并完美地工作:
passwordEditView = (EditText) rootView.findViewById(R.id.password);
final CheckBox showPasswordCheckBox = (CheckBox) rootView.findViewById(R.id.checkbox);
showPasswordCheckBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (showPasswordCheckBox.isChecked()){
passwordEditView.setTransformationMethod(null);
}else{
passwordEditView.setTransformationMethod(new PasswordTransformationMethod());
}
}
});
答案 3 :(得分:7)
这可能会帮助你交配
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// checkbox status is changed from uncheck to checked.
if (!isChecked) {
// show password
editText.setTransformationMethod(PasswordTransformationMethod.getInstance());
} else {
// hide password
editText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}
}
});
答案 4 :(得分:3)
已添加密码可见性切换功能以支持库版本24.2.0,使您可以直接从密码字段切换密码,而无需使用CheckBox。
您可以通过在TextInputEditText
上设置密码的inputType来实现这项工作。以下是如何做到这一点:
<android.support.design.widget.TextInputLayout
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/password"
android:inputType="textPassword"/>
</android.support.design.widget.TextInputLayout>
答案 5 :(得分:2)
代替可见密码,您可以尝试使用TYPE_TEXT_VARIATION_NORMAL
public void ShowPassword() {
password.setInputType((cb.isChecked()) ?
InputType.TYPE_TEXT_VARIATION_NORMAL : InputType.TYPE_TEXT_VARIATION_PASSWORD;
}
答案 6 :(得分:2)
使用app:passwordToggleEnabled = true;可从Android支持库版本24.2.0获得。
<android.support.design.widget.TextInputLayout
android:id="@+id/input_layout_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
app:passwordToggleEnabled="true"
tools:visibility="visible"
android:layout_marginBottom="@dimen/space_medium">
<android.support.design.widget.TextInputEditText
android:id="@+id/input_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:imeOptions="actionDone"
android:imeActionLabel="@string/btn_sign_in"
android:hint="@string/hint_password" />
</android.support.design.widget.TextInputLayout>
答案 7 :(得分:1)
在OnCheckedChangedListener
public static void toggleShowPassword(boolean show, EditText editText) {
if (show)
editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
else
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
editText.setSelection(editText.length());
}
EditText
光标在更改InputType
之后重置其位置,这就是为什么我们添加最后一行editText.setSelection(editText.length())
答案 8 :(得分:1)
这将有效 -
public void ShowPassword() {
if (cb.isChecked()) {
password.setInputType(InputType.TYPE_CLASS_TEXT);
} else {
password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
}
答案 9 :(得分:0)
关于您使用Xamarin(现在称为Visual Studio Mac)的机会,您可以通过这种方式实现它(我使用了Switch)
/// <summary>
/// Toggles the password.
/// </summary>
/// <param name="field">Field.</param>
/// <param name="isChecked">If set to <c>true</c> is checked.</param>
private void TogglePassword(TextView field, bool isChecked)
{
/// masks with password character
if (isChecked)
{
field.TransformationMethod = new PasswordTransformationMethod();
}
/// unmasks password
else
{
field.TransformationMethod = null;
}
然后在你的Switch上。点击这样做
switch.Click += delegate {
TogglePassword(textView, switch.Checked);
};
答案 10 :(得分:-1)
好:
显示可重复文本:
setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)
要为密码“加注星标”:
setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD)
但为什么呢? Type_Text_Variation_Password
将其设置为星号,但为什么只添加Type_Claas_Text
会恢复visibel密码?
我原以为Type_Text_Variation_VISIBLE_Password
会发挥作用......
答案 11 :(得分:-1)
public void onCheckBox(View v2)
{
CheckBox cb = (CheckBox)this.findViewById(R.id.pass_Check);
EditText et1=(EditText)this.findViewById(R.id.edt_Pass);
if(cb.isChecked())
{
et1.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
}
else
{
et1.setInputType(129);
}
}