프로그래밍 방식으로 EditText의 입력 유형을 PASSWORD에서 NORMAL로 변경하거나 그 반대로 변경
에는 지서에나라는 글자가 .EditText
이 기 입 유 력 다 설 된 경 우 정 로 으 음으로 된 경우android:inputType="textPassword"
결석으로그것은 있습니다.CheckBox
오른쪽(이 옵션을 선택하면 텍스트 편집의 입력 유형이 일반 일반 텍스트로 변경됩니다. 코드는 .
password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
문제는 CheckBox를 선택하지 않으면 입력 유형을 PASSWORD로 다시 설정해야 한다는 것입니다.전 그걸 이용해서..
password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
그러나 편집 텍스트 내부의 텍스트는 여전히 표시됩니다.그리고 놀랍게도 방향을 변경하면 자동으로 입력 유형이 PASSWORD로 설정되고 내부의 텍스트가 글머리 기호(암호처럼 표시됨)로 표시됩니다.
이것을 달성할 방법이 있습니까?
해당 거에추속에 합니다.EditText
프로그래밍 방식으로 작업을 완료합니다.
password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
숫자 암호(핀)의 경우:
password.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
또한 커서가 텍스트의 끝에 있는지 확인합니다.EditText
입력 유형을 변경하면 커서가 자동으로 시작 지점으로 설정되기 때문입니다.따라서 다음 코드를 사용하는 것이 좋습니다.
et_password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
et_password.setSelection(et_password.getText().length());
데이터 바인딩을 사용할 때는 다음 코드를 사용할 수 있습니다.
<data>
<import type="android.text.InputType"/>
.
.
.
<EditText
android:inputType='@{someViewModel.isMasked ?
(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD) :
InputType.TYPE_CLASS_TEXT }'
Kotlin을 사용하는 경우:
password.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
이 코드를 사용하여 암호를 텍스트로 변경하거나 그 반대로 변경합니다.
mCbShowPwd.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// checkbox status is changed from uncheck to checked.
if (!isChecked) {
// hide password
mEtPwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
} else {
// show password
mEtPwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}
}
});
전체 샘플 코드는 http://www.codeproject.com/Tips/518641/Show-hide-password-in-a-edit-text-view-password-ty 를 참조하십시오.
password.setInputType(InputType.TYPE_CLASS_TEXT | inputType.TYPE_TEXT_VARIATION_PASSWORD);
위의 방법은 저에게 별로 효과가 없었습니다.아래 답변은 2.2 sdk에서 작동합니다.
password.setTransformationMethod(PasswordTransformationMethod.getInstance());
ImageView를 사용하여 단일 InputType 할당으로 인해 더 적은 코드로 가시성을 전환하는 또 다른 간단한 예는 equal 연산자만 필요합니다.
EditText inputPassword = (EditText) findViewById(R.id.loginPassword);
ImageView inputPasswordShow = (ImageView) findViewById(R.id.imagePasswordShow);
inputPasswordShow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(inputPassword.getInputType() == InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) {
inputPassword.setInputType( InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
}else {
inputPassword.setInputType( InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD );
}
inputPassword.setSelection(inputPassword.getText().length());
}
});
교체:
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
포함:
InputType.TYPE_CLASS_TEXT
동일한 결과를 제공하지만 단어는 더 짧습니다.
Checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// checkbox status is checked.
if (isChecked) {
//password is visible
PasswordField.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
} else {
//password gets hided
passwordField.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
}
});
코틀린 사용자의 경우:
password.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
이것은 저에게 효과가 있었습니다.
mytext.setInputType(InputType.TYPE_CLASS_NUMBER);
이 코드를 사용하여 암호를 텍스트로 변경하거나 그 반대로 변경합니다.이 코드는 저에게 완벽하게 효과가 있었습니다.이것을 시도해보세요.
EditText paswrd=(EditText)view.findViewById(R.id.paswrd);
CheckBox showpass=(CheckBox)view.findViewById(R.id.showpass);
showpass.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(((CheckBox)v).isChecked()){
paswrd.setInputType(InputType.TYPE_CLASS_TEXT);
}else{
paswrd.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
}
});
좋아요. 몇 시간 동안 노력한 끝에 마침내 그것을 구현했습니다.아래는 코드입니다.
buttons.get(2).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if(buttons.get(2).getText().toString().equalsIgnoreCase(getResources().getString(R.string.show))){
editTexts.get(1).setInputType(InputType.TYPE_CLASS_TEXT);
editTexts.get(1).setSelection(editTexts.get(1).getText().length());
buttons.get(2).setText(getResources().getString(R.string.hide));
}else{
editTexts.get(1).setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);
//editTexts.get(1).setTransformationMethod(PasswordTransformationMethod.getInstance());
editTexts.get(1).setSelection(editTexts.get(1).getText().length());
buttons.get(2).setText(getResources().getString(R.string.show));
}
}
});
설명:- 기본 텍스트가 표시된 버튼이 있습니다.클릭 이벤트 후 버튼의 텍스트가 표시되는지 확인합니다.표시된 경우 입력 유형을 변경하고 커서 위치를 조정하고 새 텍스트를 숨깁니다.
그것이 숨을 때...암호 숨기기, 커서 바꾸기 및 텍스트 표시 설정과 같은 역방향 작업을 수행합니다.그리고 이것이 마지막입니다.그것은 매력적으로 작동하고 있습니다.
암호를 표시/숨기기 위한 이미지/버튼의 전체 onClick 핸들러입니다.
new OnClickListener() {
@Override
public void onClick(View v) {
// current ursor position
int cursorPosition = edtPassword.getSelectionStart();
// toggles the control variable
isPassworsVisible = !isPassworsVisible;
// sets the image toggler inside edit text
passwordVisible.setImageDrawable(getResources().getDrawable(isPassworsVisible ? R.drawable.ic_eye_checked : R.drawable.ic_eye_unchecked));
// apply input type
edtPassword.setInputType(isPassworsVisible ? InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD : InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
// returns cursor to position
edtPassword.setSelection(cursorPosition);
}
};
24하기 위해 Visibility Toggle 되어 암호가전기라환이을 24.2.0에서 직접 할 수 .EditText
의 필요 CheckBox
.
저먼 지으로 24.2.0업데한트후다있다니수습을 하면 할 수 .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>
텍스트 입력 레이아웃에 대한 개발자 문서에서 새 기능에 대한 자세한 내용을 확인할 수 있습니다.
Support Library v24.2.0 이후로 매우 쉽게 이를 달성할 수 있습니다.
필요한 것은 다음과 같습니다.
종속 항목에 설계 라이브러리 추가
dependencies { compile "com.android.support:design:25.1.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.support.design.widget.TextInputEditText android:id="@+id/etPassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/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
배경 색조를 적용하는 데 사용되는 혼합 모드입니다.
텍스트 입력 레이아웃 설명서의 자세한 내용.
에.setInputType
암호 필드의 경우 글꼴에 문제가 있습니다.
문제 입니다.
protected void onCreate(Bundle savedInstanceState) {
...
findViewById(R.id.button_show_hide_password).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isPasswordVisible(edtPassword)) {
enableInputHiddenPassword(edtPassword);
} else {
enableInputVisiblePassword(edtPassword);
}
edtPassword.setSelection(edtPassword.getText().length());
}
});
}
final int INPUT_TYPE_VISIBLE_PASSWORD = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD;
final int INPUT_TYPE_HIDDEN_PASSWORD = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD;
private boolean isPasswordVisible(EditText editText) {
return editText.getInputType() == INPUT_TYPE_VISIBLE_PASSWORD;
}
private void enableInputVisiblePassword(EditText editText) {
Typeface cache = editText.getTypeface();
editText.setInputType(INPUT_TYPE_VISIBLE_PASSWORD);
editText.setTypeface(cache);
}
private void enableInputHiddenPassword(EditText editText) {
Typeface cache = editText.getTypeface();
editText.setInputType(INPUT_TYPE_HIDDEN_PASSWORD);
editText.setTypeface(cache);
}
참고: 사용합니다.InputType.TYPE_TEXT_VARIATION_PASSWORD
에 InputType.TYPE_CLASS_TEXT
또는HideReturnsTransformationMethod
저는 에 텍스트와 때문입니다.
변환 방법 사용:
숨기기:
editText.transformationMethod = PasswordTransformationMethod.getInstance()
표시 대상:
editText.transformationMethod = SingleLineTransformationMethod.getInstance()
바로 그겁니다.
는 것다할입니를 입니다.android:inputType="textPassword"
사용자의 레이아웃에서.그것이 방향이 바뀌면 다시 비밀번호로 전환하는 이유입니다.방향이 변경될 때마다 보기가 재생성되기 때문입니다.
첫 번째 문제는 다음과 같습니다.
String text = password.getText();
password.setText("");
password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
password.setText(text);
기본적으로 입력 유형을 변경한 다음 다시 추가하기 전에 텍스트를 비웁니다.
Visual Studio/Xamarin에 대한 유사한 솔루션을 검색하면 이 스레드가 나타납니다.아래는 사마린과 함께 저에게 효과가 있었던 것입니다.에서는 " 이구은다유니다합지음을현▁the"를 유지합니다.TYPE_TEXT_FLAG_NO_SUGGESTIONS
플래그를 지정합니다.
EditText et = FindViewById<EditText>(Resource.Id.ET);
하는 방법: 표기하시문et.InputType = Android.Text.InputTypes.TextVariationVisiblePassword | Android.Text.InputTypes.TextFlagNoSuggestions;
문자숨기et.InputType = Android.Text.InputTypes.TextVariationPassword | Android.Text.InputTypes.ClassText;
" " " " " "int position = et.Text.Length;
et.SetSelection(position, position);
약간의 역동적인 상황holder.edit_pin.setInputType(InputType.TYPE_CLASS_NUMBER);
둘 다 그렇게 사용하는 것이 더 잘 작동하지 않을 것입니다.
holder.edit_pin.setInputType(InputType.TYPE_CLASS_NUMBER);
holder.edit_pin.setTransformationMethod(PasswordTransformationMethod.getInstance());
참고: 어레이 어댑터 사용과 같은 동적 컨트롤을 사용하는 경우에 적합합니다.
확인란에서 입력 유형을 변경합니다.OnCheckedChangeListener
합니다:
passwordEdit.setInputType(InputType.TYPE_CLASS_TEXT| (isChecked? InputType.TYPE_TEXT_VARIATION_PASSWORD|~InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD : InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD));
그리고 마침내 효과가 있었습니다.
에 대한 부울적인 문제인 것 같습니다.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
깃발을 뒤집으면 문제가 해결될 것입니다.
당신의 경우:
password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD|~InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
@Rajkiran이 제공한 정답에 대한 추가 의견, 추가하고 싶을 수 있습니다.
etPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
키보드의 자동 제안에 사용자가 짜증내지 않도록 정상 입력 상태로.
암호 편집 텍스트에서 암호 가시성을 적용하려는 경우 코드를 완성합니다.
핸들 만들기 [모든 그리기 가능 또는 확인란]
클릭 시 또는 선택/선택 취소 시 기록:
if (edittext.getInputType() == (InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD )){
edittext.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD );
}else{
edittext.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD );
}
다음 행을 쓰는 것을 잊지 마십시오.
edittext.setSelection(edittext.getText().length());
커서를 줄의 끝으로 재설정합니다.
블록 견적
최종 int[] 카운트 = {0};
showandhide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(count[0] ==0)
{
password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
count[0]++;
}
else {
password.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
showandhide.setText("Hide");
count[0]--;
}
}
});
니어젯과 에버턴 페르난데스 로사리오의 대답을 바탕으로 코틀린에서 썼습니다.password
레이아웃에 있는 편집 텍스트의 ID입니다.
// Show passwords' symbols.
private fun showPassword() {
password.run {
val cursorPosition = selectionStart
transformationMethod = HideReturnsTransformationMethod.getInstance()
setSelection(cursorPosition)
}
}
// Show asterisks.
private fun hidePassword() {
password.run {
val cursorPosition = selectionStart
transformationMethod = PasswordTransformationMethod.getInstance()
setSelection(cursorPosition)
}
}
ePost.setInputType(InputType).TYPE_TEXT_FLAG_MULTI_LINE | 입력 유형.TYPE_TEXT_VARIATION_SHORT_MESSAGE);
암호를 표시되는 텍스트로 변경하려면 다음을 사용합니다.
profileSignupDialogBinding.signupDialogPassword.inputType = InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
숨겨진 텍스트로 다시 변경하려면 다음을 사용합니다.
profileSignupDialogBinding.signupDialogPassword.inputType = InputType.TYPE_TEXT_VARIATION_PASSWORD
profileSignupDialogBinding.signupDialogPassword.transformationMethod = PasswordTransformationMethod.getInstance()
이것은 잘 될 것입니다.
언급URL : https://stackoverflow.com/questions/9892617/programmatically-change-input-type-of-the-edittext-from-password-to-normal-vic
'programing' 카테고리의 다른 글
Android에서 이미지 보기의 경계? (0) | 2023.08.16 |
---|---|
jquery-ui-dialog - 대화 상자 닫기 이벤트에 연결하는 방법 (0) | 2023.08.16 |
merge-commit이 중간에 있는 커밋을 지우는 방법은 무엇입니까? (0) | 2023.08.16 |
SYS_CONNECT_를 사용하는 경우 Oracle ORA-30004BY_PATH 함수, (0) | 2023.08.16 |
MySQL 타임스탬프 날짜 범위 선택 (0) | 2023.08.16 |