사용자가 안드로이드 EditText에서 숨기기 및보기 암호를 전환 할 수있는 영리한 방법이 있습니까? 많은 PC 기반 앱이이를 가능하게합니다.
답변
TextView의 속성을 동적으로 변경할 수 있습니다. XML Atrribute android:password
를 true로 설정하면 뷰를 false로 설정하면 텍스트가 표시됩니다.
setTransformationMethod 메소드를 사용하면 코드에서이 속성을 변경할 수 있어야합니다. (면책 조항 :보기가 표시된 후에도 방법이 여전히 작동하는지 테스트하지 않았습니다. 문제가 발생하면 알려주십시오.)
전체 샘플 코드는
yourTextView.setTransformationMethod(new PasswordTransformationMethod());
비밀번호를 숨기려면 암호를 표시하기 위해 기존 변환 방법 중 하나를 설정하거나 입력 텍스트와 관련이없는 빈 TransformationMethod 를 구현할 수 있습니다.
yourTextView.setTransformationMethod(new DoNothingTransformation());
답변
Support Library v24.2.0 이후로 달성하기가 정말 쉽습니다.
당신이해야 할 일은 단지 :
-
의존성에 디자인 라이브러리 추가
dependencies { compile "com.android.support:design:24.2.0" }
-
사용
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>
passwordToggleEnabled
속성은 일을 할 것입니다!
-
루트 레이아웃에서 추가하는 것을 잊지 마십시오
xmlns:app="http://schemas.android.com/apk/res-auto"
-
다음을 사용하여 비밀번호 토글을 사용자 정의 할 수 있습니다.
app:passwordToggleDrawable
-비밀번호 입력 가시성 토글 아이콘으로 사용할 수 있습니다.
app:passwordToggleTint
-비밀번호 입력 가시성 토글에 사용할 아이콘입니다.
app:passwordToggleTintMode
-배경 색조를 적용하는 데 사용되는 혼합 모드.
TextInputLayout 문서 에서 자세한 내용을 참조하십시오 .
AndroidX의 경우
-
교체
android.support.design.widget.TextInputLayout
로com.google.android.material.textfield.TextInputLayout
-
교체
android.support.design.widget.TextInputEditText
로com.google.android.material.textfield.TextInputEditText
답변
암호 대신 점을 표시하려면 PasswordTransformationMethod를 설정하십시오.
yourEditText.setTransformationMethod(new PasswordTransformationMethod());
물론 xml 레이아웃의 edittext 요소에서 기본적으로 이것을 설정할 수 있습니다.
android:password
읽을 수있는 비밀번호를 다시 표시하려면 변환 방법으로 null을 전달하십시오.
yourEditText.setTransformationMethod(null);
답변
표시하려면 :
editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
숨기려고:
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
이 각각의 커서 후에 재설정됩니다.
editText.setSelection(editText.length());
답변
당신이 사용할 수있는 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">
답변
확인란을 사용하고 그에 따라 입력 유형을 변경하십시오.
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);
}
}
답변
private boolean isPasswordVisible;
private TextInputEditText firstEditText;
…
firstEditText = findViewById(R.id.et_first);
…
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;
}