Android 암호 입력 상자 동적 명문/암호 전환 표시 효과 구현
먼저 효과 도 를 올 리 고 화면 gif 를 녹화 하 는 강 좌 를 보 았 습 니 다.어 쩔 수 없 이 핸드폰 이 너무 오래된 시스템 버 전 은 지원 되 지 않 고 정적 그림 만 올 라 갑 니 다.
암호 입력 상자 동적 명문/암호 전환 표시
이 효과 도 를 보 았 을 때,당신 은 이미 대략적인 생각 을 알 아 맞 혔 다 고 믿 습 니 다.맞습니다.바로 우리 의 EditText 에 drawable Right 를 설정 하 는 것 입 니 다.그림 속 의 눈 그림 은 한 쌍 의 짝 이 있 습 니 다.martial designde 사이트 에서 다운로드 한 것 입 니 다.사용자 가 drawable Right 를 클릭 할 때 drawable 을 동적 으로 바 꾸 고 그 다음 에 EditText 의 input Type 을 바 꾸 면 우리 의 목 표를 실현 할 수 있 습 니 다.사용자 정의 EditText 를 통 해 쉽게 이 루어 집 니 다.이때 첫 번 째 장애물 이 나 옵 니 다.EditText 의 네 방향 인 Drawable 은 버튼 을 누 르 는 것 과 같은 감청 listener 를 설정 할 수 없습니다.이때 우 리 는 아 날로 그 클릭 을 통 해 효 과 를 얻 을 수 밖 에 없다.주로 EditText 의 onTouchEvent 방법 을 통 해 손가락 이 들 어 올 릴 때의 점 의 좌표 가 drawableRight 구역 에 있 는 지 여 부 를 판단 합 니 다.위치 에 있 으 면 그림 과 input Type 을 동적 으로 바 꾸 는 작업 을 수행 합 니 다.여기 서 판단 규칙 은 매우 간단 합 니 다.점 좌표 의 x 값 은 EditText 의 너비 보다 큽 니 다.-(아이콘 의 너비+아이콘 의 padding+아이콘 에서 컨트롤 의 오른쪽 거리)그리고 x 의 값 은 EditText 의 너비-그림 에서 컨트롤 의 오른쪽 거리 보다 작 습 니 다.정확 한 판단 을 위해 Y 축 방향 으로 판단 할 수 있 습 니 다.
몇 가지 중요 한 방법:
getCompoundDrawables();
EditText,left,top,right,bottom 네 방향 에 있 는 drawable 을 얻 었 습 니 다.여기 서 우 리 는 주로 right 방향 에 관심 을 가지 고 있 습 니 다.setCompoundDrawables();
EditText 에 네 방향의 drawable 을 설정 합 니 다.설정 하기 전에 drawable 의 경계 크기 를 지정 해 야 합 니 다.draw 는 이 값 을 사용 합 니 다.설정 하지 않 으 면 아이콘 이 그 려 지지 않 습 니 다.EditText 의 input type 을 설정 하 는 방법 입 니 다.이 type 은 필요 에 따라 어떤 종 류 를 사용 할 지 결정 할 수 있 는 여러 가지 유형 이 있 습 니 다.
this.setInputType(EditorInfo.TYPE_TEXT_VARIATION_PASSWORD);
this.setInputType(EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
4 명문 밀 문의 또 다른 실현 방식.4.567914.텍스트 내용 의 한 줄,점(비밀번호)표시 효 과 는 모두 TransformationMethod 에서 지정 합 니 다.
this.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
this.setTransformationMethod(PasswordTransformationMethod.getInstance());
그 다음 에 바로 코드 를 붙 였 습 니 다.생각 은 이미 매니저 가 잘 알 고 코드 주석 도 완전 합 니 다.큰 문 제 는 없 을 거 라 고 믿 습 니 다.
public class TogglePasswordVisibilityEditText extends EditText {
// drawable
private Drawable visibilityDrawable;
private boolean visibililty = false;
public TogglePasswordVisibilityEditText(Context context) {
this(context, null);
}
public TogglePasswordVisibilityEditText(Context context, AttributeSet attrs) {
// style
this(context, attrs, android.R.attr.editTextStyle);
}
public TogglePasswordVisibilityEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
// EditText left ,top ,right,bottom drawable
Drawable[] compoundDrawables = getCompoundDrawables();
visibilityDrawable = compoundDrawables[2];
if (visibilityDrawable == null) {
visibilityDrawable = getResources().getDrawable(R.drawable.ic_visibility_off_black_24dp);
}
}
/**
*
* EditText - ( + )
* EditText - ,
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_UP) {
if (getCompoundDrawables()[2] != null) {
boolean xFlag = false;
boolean yFlag = false;
// ,
xFlag = event.getX() > getWidth() - (visibilityDrawable.getIntrinsicWidth() + getCompoundPaddingRight
()) &&
event.getX() < getWidth() - (getTotalPaddingRight() - getCompoundPaddingRight());
if (xFlag) {
visibililty = !visibililty;
if (visibililty) {
visibilityDrawable = getResources().getDrawable(R.drawable.ic_visibility_black_24dp);
/*this.setInputType(EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);*/
this.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
} else {
//
visibilityDrawable = getResources().getDrawable(R.drawable.ic_visibility_off_black_24dp);
//this.setInputType(EditorInfo.TYPE_TEXT_VARIATION_PASSWORD);
this.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
//
CharSequence text = this.getText();
if (text instanceof Spannable) {
Spannable spanText = (Spannable) text;
Selection.setSelection(spanText, text.length());
}
// setCompoundDrawables , drawable ,
visibilityDrawable.setBounds(0, 0, visibilityDrawable.getMinimumWidth(),
visibilityDrawable.getMinimumHeight());
setCompoundDrawables(getCompoundDrawables()[0],
getCompoundDrawables()[1], visibilityDrawable, getCompoundDrawables()[3]);
}
}
}
return super.onTouchEvent(event);
}
}
위 에서 말 한 것 은 소 편 이 소개 한 안 드 로 이 드 가 비밀번호 입력 상자 의 동적 명문/비밀문서 전환 디 스 플레이 효 과 를 실현 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.