jac*_*nad 158 passwords android
是否有一种聪明的方法让用户在Android EditText中隐藏和查看密码之间切换?许多基于PC的应用程序允许用户执行此操作.
mmB*_*mBs 271
自支持库v24.2.0以来,它实现起来非常简单.
你需要做的只是:
将设计库添加到您的dependecies
dependencies {
compile "com.android.support:design:24.2.0"
}
Run Code Online (Sandbox Code Playgroud)使用TextInputEditText会同TextInputLayout
<android.support.design.widget.TextInputLayout
android:id="@+id/etPasswordLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:passwordToggleEnabled="true"
android:layout_marginBottom="@dimen/login_spacing_bottom">
<android.support.design.widget.TextInputEditText
android:id="@+id/etPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/fragment_login_password_hint"
android:inputType="textPassword"/>
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)该passwordToggleEnabled属性将完成工作!
在您的根布局中不要忘记添加 xmlns:app="http://schemas.android.com/apk/res-auto"
您可以使用以下方法自定义密码切换:
app:passwordToggleDrawable - Drawable用作密码输入可见性切换图标.
app:passwordToggleTint - 用于密码输入可见性切换的图标.
app:passwordToggleTintMode - 用于应用背景色调的混合模式.
TextInputLayout文档中的更多详细信息.
Jan*_*usz 137
您可以动态更改TextView的属性.如果要将XML Atrribute设置android:password为true,则如果将其设置为false,则视图将显示点,显示文本.
使用setTransformationMethod方法,您应该能够从代码中更改此属性.(免责声明:我没有测试该方法在显示视图后是否仍然有效.如果您遇到问题,请留下评论让我知道.)
完整的示例代码将是
yourTextView.setTransformationMethod(new PasswordTransformationMethod());
Run Code Online (Sandbox Code Playgroud)
隐藏密码 要显示密码,您可以设置一个现有的转换方法,或者实现一个对输入文本不做任何处理的空TransformationMethod.
yourTextView.setTransformationMethod(new DoNothingTransformation());
Run Code Online (Sandbox Code Playgroud)
Qli*_*max 104
要显示点而不是密码,请设置PasswordTransformationMethod:
yourEditText.setTransformationMethod(new PasswordTransformationMethod());
Run Code Online (Sandbox Code Playgroud)
当然,您可以在xml布局中的edittext元素中默认设置此项
android:password
Run Code Online (Sandbox Code Playgroud)
要重新显示可读密码,只需将null作为转换方法传递:
yourEditText.setTransformationMethod(null);
Run Code Online (Sandbox Code Playgroud)
Mat*_*gan 77
显示:
editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
Run Code Online (Sandbox Code Playgroud)
隐藏:
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
Run Code Online (Sandbox Code Playgroud)
在每个光标重置后,所以:
editText.setSelection(editText.length());
Run Code Online (Sandbox Code Playgroud)
小智 30
您可以使用 app:passwordToggleEnabled="true"
这是下面给出的例子
<android.support.design.widget.TextInputLayout
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:passwordToggleEnabled="true"
android:textColorHint="@color/colorhint"
android:textColor="@color/colortext">
Run Code Online (Sandbox Code Playgroud)
小智 16
我有同样的问题,它很容易实现。
您所要做的就是将您的 EditText 字段包装在 (com.google.android.material.textfield.TextInputLayout) 中,然后添加 ( app:passwordToggleEnabled="true" )。
这将在 EditText 字段中显示眼睛,当您单击它时,密码将出现并在再次单击时消失。
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColorHint="#B9B8B8"
app:passwordToggleEnabled="true">
<EditText
android:id="@+id/register_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="24dp"
android:layout_marginRight="44dp"
android:backgroundTint="#BEBEBE"
android:hint="Password"
android:inputType="textPassword"
android:padding="16dp"
android:textSize="18sp" />
</com.google.android.material.textfield.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
Pra*_*ena 12
使用复选框并相应地更改输入类型.
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int start,end;
Log.i("inside checkbox chnge",""+isChecked);
if(!isChecked){
start=passWordEditText.getSelectionStart();
end=passWordEditText.getSelectionEnd();
passWordEditText.setTransformationMethod(new PasswordTransformationMethod());;
passWordEditText.setSelection(start,end);
}else{
start=passWordEditText.getSelectionStart();
end=passWordEditText.getSelectionEnd();
passWordEditText.setTransformationMethod(null);
passWordEditText.setSelection(start,end);
}
}
Run Code Online (Sandbox Code Playgroud)
private boolean isPasswordVisible;
private TextInputEditText firstEditText;
Run Code Online (Sandbox Code Playgroud)
...
firstEditText = findViewById(R.id.et_first);
Run Code Online (Sandbox Code Playgroud)
...
private void togglePassVisability() {
if (isPasswordVisible) {
String pass = firstEditText.getText().toString();
firstEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());
firstEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
firstEditText.setText(pass);
firstEditText.setSelection(pass.length());
} else {
String pass = firstEditText.getText().toString();
firstEditText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
firstEditText.setInputType(InputType.TYPE_CLASS_TEXT);
firstEditText.setText(pass);
firstEditText.setSelection(pass.length());
}
isPasswordVisible= !isPasswordVisible;
}
Run Code Online (Sandbox Code Playgroud)
这对我有用.这对你肯定有帮助
showpass.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(!isChecked){
// show password
password_login.setTransformationMethod(PasswordTransformationMethod.getInstance());
Log.i("checker", "true");
}
else{
Log.i("checker", "false");
// hide password
password_login.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}
}
});
Run Code Online (Sandbox Code Playgroud)
上述密码开关的代码(xml代码)
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/laypass"
android:layout_width="330dp"
android:layout_height="50dp"
android:layout_marginTop="24dp"
app:layout_constraintEnd_toEndOf="@+id/editText3"
app:layout_constraintStart_toStartOf="@+id/editText3"
app:layout_constraintTop_toBottomOf="@+id/editText3">
<EditText
android:id="@+id/edit_password"
style="@style/EditTextTheme"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/round"
android:drawableLeft="@drawable/ic_password"
android:drawablePadding="10dp"
android:ems="10"
android:hint="Password"
android:inputType="textPassword"
android:paddingLeft="10dp"
android:paddingRight="15dp"
android:textColor="@color/cyan92a6"
android:textColorHint="@color/cyan92a6"
android:textCursorDrawable="@null"
android:textSize="18sp"
/>
<ImageView
android:id="@+id/show_pass_btn"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginEnd="8dp"
android:alpha=".5"
android:onClick="ShowHidePass"
android:padding="5dp"
android:src="@drawable/ic_visibility"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/laypass"
app:layout_constraintTop_toTopOf="@+id/edit_password" />
</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
按钮操作的Java代码
public void ShowHidePass(View view) {
if(view.getId()==R.id.show_pass_btn){
if(edit_password.getTransformationMethod().equals(PasswordTransformationMethod.getInstance())){
((ImageView)(view)).setImageResource(R.drawable.ic_visibility_off);
//Show Password
edit_password.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}
else{
((ImageView)(view)).setImageResource(R.drawable.ic_visibility);
//Hide Password
edit_password.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
}
}
Run Code Online (Sandbox Code Playgroud)
我觉得即使有一些好的答案,我也想回答这个问题,
根据文档TransformationMethod来完成我们的任务
转换方法
TextView使用TransformationMethods进行操作,例如用点替换密码字符,或防止换行符在单行文本字段中引起换行。
注意,我使用黄油刀,但是如果用户检查显示密码,则使用黄油刀。
@OnCheckedChanged(R.id.showpass)
public void onChecked(boolean checked){
if(checked){
et_password.setTransformationMethod(null);
}else {
et_password.setTransformationMethod(new PasswordTransformationMethod());
}
// cursor reset his position so we need set position to the end of text
et_password.setSelection(et_password.getText().length());
}
Run Code Online (Sandbox Code Playgroud)
我能够仅用几行添加ShowPassword / HidePassword代码,这些代码包含在一个块中:
protected void onCreate(Bundle savedInstanceState) {
...
etPassword = (EditText)findViewById(R.id.password);
etPassword.setTransformationMethod(new PasswordTransformationMethod()); // Hide password initially
checkBoxShowPwd = (CheckBox)findViewById(R.id.checkBoxShowPwd);
checkBoxShowPwd.setText(getString(R.string.label_show_password)); // Hide initially, but prompting "Show Password"
checkBoxShowPwd.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton arg0, boolean isChecked) {
if (isChecked) {
etPassword.setTransformationMethod(null); // Show password when box checked
checkBoxShowPwd.setText(getString(R.string.label_hide_password)); // Prompting "Hide Password"
} else {
etPassword.setTransformationMethod(new PasswordTransformationMethod()); // Hide password when box not checked
checkBoxShowPwd.setText(getString(R.string.label_show_password)); // Prompting "Show Password"
}
}
} );
...
Run Code Online (Sandbox Code Playgroud)
以非常简单的形式:
private fun updatePasswordVisibility(editText: AppCompatEditText) {
if (editText.transformationMethod is PasswordTransformationMethod) {
editText.transformationMethod = null
} else {
editText.transformationMethod = PasswordTransformationMethod()
}
editText.setSelection(editText.length())
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
170084 次 |
| 最近记录: |