Android 사용자 정의 view 입력 컨트롤 구현

본 사례 는 안 드 로 이 드 사용자 정의 view 가 입력 컨트롤 을 실현 하 는 구체 적 인 코드 를 공유 하 였 으 며,구체 적 인 내용 은 다음 과 같다.

네트워크 의 대부분의 입력 컨트롤 은 여러 개의 EditText 로 조합 되 어 있 습 니 다.이 예 에서 사용 하 는 것 은:
  • 단일 EditText 를 입력 한 캡 처 컨트롤 로 합 니 다
  • 여러 ImageView 의 하위 클래스 를 표시 하 는 컨트롤 로 EditText 의 데 이 터 를 그립 니 다.
  • 위의 그림 과 같이:
  • 입력 전과 입력 후 입력 상자 에 응답 하 는 변화 가 필요 합 니 다
  • 사용자 정의 컨트롤 을 누 르 면 소프트 키 보드 를 꺼 냅 니 다
  • EditText 데이터 캡 처 와 EditView 를 조작 할 수 없습니다(조작 할 수 있 으 면 데이터 처리 가 혼 란 스 럽 습 니 다)
  • 4.567917.진 후에 해당 하 는 힌트 를 받 습 니 다.4.567918.
  • ImageView 의 하위 클래스 는 너비,글꼴 크기,색상,그리고 두 View 사이 의 간격 을 설정 할 수 있 습 니 다.
  • 그럼 코드 시작:
    먼저 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
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기