I use an EditText to enter password. And a CheckBox to show password or not. Below function is the part:
public void ShowPassword() {
if (cb.isChecked()) {
I think you are using the wrong function. I make that way and work perfectly:
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());
}
}
});
The Password Visibility Toggle feature has been added to support library version 24.2.0 enabling you to toggle the password straight from the password field without the need for a CheckBox.
You can make that work basically by setting an inputType of password on the TextInputEditText
. Here's how to do that:
<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>
I don't know exactly the specifics, but this code should work:
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
is the input type set when setting android:inputType="textPassword"
edit:
as mentioned in @user370305's answer, 129
is the value of the bitwise or operation when you do
password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
okay:
To show readeable text:
setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)
To "star" the password:
setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD)
But why? The Type_Text_Variation_Password
set it to stars, but why does only adding Type_Claas_Text
revive the visibel password?
I would have thought that Type_Text_Variation_VISIBLE_Password
comes into play ...
use app:passwordToggleEnabled = true; available from Android support library version 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>
on the off chance that you are using Xamarin (Visual Studio Mac as it's now called) you can achieve it this way (I used a 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;
}
Then on your Switch .click do something like this
switch.Click += delegate {
TogglePassword(textView, switch.Checked);
};