Android 사용자 정의 view 입력 컨트롤 구현
네트워크 의 대부분의 입력 컨트롤 은 여러 개의 EditText 로 조합 되 어 있 습 니 다.이 예 에서 사용 하 는 것 은:
먼저 ImageView 의 하위 클래스 TextImageView 입 니 다.onDraw 의 실현 도 간단 합 니 다.즉,text 의 길이 가 0 이상 인지 판단 하 는 것 입 니 다.0 이상 이면 문 자 를 그립 니 다.그리고 일부 세부 처 리 는 글꼴 색상,글꼴 대문자,글꼴 의 너비 와 높이 를 설정 하 는 것 입 니 다.
@Override
protected void onDraw(Canvas canvas) {
if (text.length() > 0) {
if (isDrawSrc) {
super.onDraw(canvas);
}
canvas.drawText(text, 0, text.length(), (getMeasuredWidth() - textWidth) / 2, (getMeasuredHeight() + dy) / 2, textPaint);
} else {
super.onDraw(canvas);
}
}
그 다음으로 PasswordView 는 사용자 정의 ViewGroup 으로 레이아웃 을 도 입 했 습 니 다.레이아웃 에는 EditText(데이터 캡 처)와 Linearlayout(코드 에 TextImageView 추가)가 있 습 니 다.EditText 의 너비 와 높이 는 1dp 와 0dp 입 니 다.(사용자 가 EditText 를 조작 할 수 없 도록 합 니 다.)Linearlayout 에 divider 속성 을 설정 합 니 다(두 개의 TextImageView 간격)PasswordView 의 핵심 코드 는 다음 과 같 습 니 다.
-코드 제어 EditView 입력 가 져 오기
public void requestEtFocus() {
catchInput.setFocusable(true);
catchInput.setFocusableInTouchMode(true);
catchInput.setClickable(true);
catchInput.requestFocus();
showSoftKeyboard(catchInput);
catchInput.setCursorVisible(false);
catchInput.setSelection(catchInput.length());
}
// TextImageView
for (int i = 0; i < passwordLength; i++) {
TextImageView view = new TextImageView(context);
view.setTextSize(textSize);
view.setTextColor(textColor);
content.addView(view);
if (unInputBg != 0) {
view.setBackgroundResource(unInputBg);//
}
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) itemWidth, (int) itemHeight);
if (i == 0) {
params.setMargins((int) dpToPixel(1), 0, 0, 0);
}
if (i == passwordLength - 1) {
params.setMargins(0, 0, (int) dpToPixel(1), 0);
}
view.setLayoutParams(params);
views[i] = view;
// , TextIamgeView
if (text != null && i < text.length()) {
setItemText(text.subSequence(i, i + 1));
}
}
//
catchInput.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.length() > 0) {
// index: ;
if (index > s.length()) {
removeItemText();//
} else {
setText(s);
if (s.length() == passwordLength) {
if (listener != null) {
//
listener.onInputCodeEnd(s);
}
}
}
} else if (s.length() == 0 && index > 0) {
removeItemText();
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
실현 이 비교적 간단 하고 대부분 세부 적 인 처리 이 며 구체 적 으로 소스 코드 를 본다PasswordView이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.