Android에서 암호 입력 내용 표시 전환
먼저 간단한 테스트 프로젝트를 썼다.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/pwd_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"/>
<Button
android:id="@+id/pwd_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" "/>
</LinearLayout>
package com.example.helloword;
import android.app.Activity;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
EditText pwdEdit;
boolean flag = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pwdEdit = (EditText) findViewById(R.id.pwd_edit);
Button pwdSwitch = (Button) findViewById(R.id.pwd_switch);
pwdSwitch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(flag){
pwdEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
flag = false;
}else{
pwdEdit.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
flag = true;
}
}
});
}
}
그 결과 이런 방법은 안 되고 비밀번호가 표시되면 더 이상 숨길 수 없다는 것을 발견했다.
그래서 찾아보니 다음과 같은 방법이 있었다.
package com.example.helloword;
import android.app.Activity;
import android.os.Bundle;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
EditText pwdEdit;
boolean flag = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pwdEdit = (EditText) findViewById(R.id.pwd_edit);
Button pwdSwitch = (Button) findViewById(R.id.pwd_switch);
pwdSwitch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (!flag) {
pwdEdit.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
} else {
pwdEdit.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
flag = !flag;
pwdEdit.postInvalidate();
}
});
}
}
이렇게 하면 되지만 커서가 전환될 때마다 행 맨 위로 돌아가고 수정된 코드는 다음과 같습니다.
package com.example.helloword;
import android.app.Activity;
import android.os.Bundle;
import android.text.Selection;
import android.text.Spannable;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity {
EditText pwdEdit;
boolean flag = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pwdEdit = (EditText) findViewById(R.id.pwd_edit);
Button pwdSwitch = (Button) findViewById(R.id.pwd_switch);
pwdSwitch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (!flag) {
pwdEdit.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
} else {
pwdEdit.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
flag = !flag;
pwdEdit.postInvalidate();
CharSequence text = pwdEdit.getText();
if (text instanceof Spannable) {
Spannable spanText = (Spannable)text;
Selection.setSelection(spanText, text.length());
}
}
});
}
}
완벽하게 해결되었지만 이 Hide Return Transformation Method와Password Transformation Method가 낯설어서 인터넷에 검색해 보니 이 종류는 입력 문자의 표시를 바꾸는 도구류에 해당한다는 것을 발견했다.그러나
setTransformationMethod는 입력한 문자를 변환할 수 있습니다. 자신의 변환이 필요하다면 TransformationMethod 인터페이스를 통해 목적을 달성할 수 있습니다. (예를 들어 입력한 모든 문자를 a로 바꾸거나 a를 입력하면 z를 표시하고 z를 입력하면 a를 표시합니다.)
여기에는 단지 기록일 뿐입니다. 더 좋은 방법이 있다면 인색하지 마십시오^ ^
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
EditText 컨텐트 끝내기WebView처럼 EditText 내에서 텍스트를 읽어들이고 싶어서 조사했습니다. 구체적으로 말하자면, 나는 편집 중인 텍스트를 검색하는 기능을 만들고 싶은 동기가 있다. EditText에서find의 API를 준비하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.