Показывать пароль с помощью EditText
Я использую 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 не отмечен?
Ответы
Ответ 1
Я точно не знаю специфику, но этот код должен работать:
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);
Ответ 2
Это не ответ,
Ответ уже дан и принят.
Я просто хочу уточнить о 129
password.setInputType(129);
Действительно,
password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
'|' не является каналом, это a bitwise OR
. Он принимает два двоичных числа, и если один из бит равного значения равен 1,
Как это относится к типу ввода: каждый из InputTypes на самом деле просто ints.
TYPE_CLASS_TEXT is 1
и TYPE_TEXT_VARIATION_PASSWORD is 128 (or 10000000)
.
Выполните на них bitwise OR
:
00000001
10000000
------------
10000001 which is 129.
Попробуйте ввести input.setInputType(129);
вместо этого, вы увидите, что это сработает.:)
Ответ 3
Я думаю, что вы используете неправильную функцию. Я делаю так и отлично работаю:
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());
}
}
});
Ответ 4
Это может помочь вам спарить
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());
}
}
});
Ответ 5
Функция поддержки видимости пароля была добавлена для поддержки версии библиотеки 24.2.0, позволяющей вам переключаться с паролем прямо из поля пароля без необходимости в CheckBox.
Вы можете сделать эту работу в основном, установив inputType пароля на TextInputEditText
. Вот как это сделать:
<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>
Ответ 6
вместо видимого пароля, вы можете попробовать с TYPE_TEXT_VARIATION_NORMAL
public void ShowPassword() {
password.setInputType((cb.isChecked()) ?
InputType.TYPE_TEXT_VARIATION_NORMAL : InputType.TYPE_TEXT_VARIATION_PASSWORD;
}
Ответ 7
Вызвать этот метод внутри 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
use 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>
Ответ 9
В случае, если вы используете Xamarin (Visual Studio Mac, как он теперь называется), вы можете достичь этого таким образом (я использовал коммутатор)
/// <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;
}
Затем на вашем коммутаторе .click сделайте что-то вроде этого
switch.Click += delegate {
TogglePassword(textView, switch.Checked);
};
Ответ 10
Это будет работать -
public void ShowPassword() {
if (cb.isChecked()) {
password.setInputType(InputType.TYPE_CLASS_TEXT);
} else {
password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
}
Ответ 11
в порядке:
Чтобы отобразить текст, возвращаемый повторно:
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
вступает в игру...
Ответ 12
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);
}
}