Android 사용자 정의 EditText 오른쪽 그림 컨트롤

머리말
최근 프로젝트 의 사용자 로그 인 모듈 은 오른쪽 에 그림 이 있 는 EditText 가 필요 합 니 다.그림 은 클릭 효 과 를 설정 할 수 있 기 때문에 자 료 를 찾 아 사용자 정의 EditText 를 만들어 서 나중에 재 활용 하기에 편리 합 니 다.
의 원리
다음은 EditText 를 사용자 정의 하 는 코드 입 니 다.구체 적 으로 어 려 운 점 은 그림 의 클릭 감청 을 실현 하 는 것 입 니 다.구 글 정부 가 아직 까지 EditText 안의 그림 을 직접 실현 하 는 감청 API 를 제시 하지 않 았 기 때 문 입 니 다.제 방법 은 전체 컨트롤 이 OnTouchListener 를 연결 한 다음 에 클릭 이 벤트 를 모니터링 하고 클릭 위치의 X 좌표 가 그림 의 덮어 쓰기 범위 내 에 있 는 지 확인 하 는 것 입 니 다(아래 getCompound Drawables()[2]안의 2 는 EditText 오른쪽 에 있 는 그림 을 대표 하 는 것 입 니 다).만약 에 점 격 이 벤트 를 실행 하 는 것 입 니 다.

package scut.userlogin;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;

/**
 * Created by yany on 2016/7/23.
 */
public class EditText_PassWordDisplay extends EditText implements View.OnTouchListener {

 //             ,           EditText  
 public EditText_PassWordDisplay(Context context) {
 super(context);
 init();
 }

 public EditText_PassWordDisplay(Context context, AttributeSet attrs, int defStyle) {
 super(context, attrs, defStyle);
 init();
 }

 public EditText_PassWordDisplay(Context context, AttributeSet attrs) {
 super(context, attrs);
 init();
 }

 //     ,     
 public void init(){
 setOnTouchListener(this);
 }

 @Override
 public boolean onTouch(View v, MotionEvent event) {
 //        ,     ,             ,     
 if (event.getAction() == MotionEvent.ACTION_UP && this.getCompoundDrawables()[2] != null) {
  //       X          
  if (event.getX() > this.getWidth()
   - this.getPaddingRight()
   - this.getCompoundDrawables()[2].getIntrinsicWidth()) {

  //          
  System.out.println("    ");
  MessageShow.ShowToast(getContext(), "     ");

  }
  return false;
 }
 return false;
 }
}

xml 에서 만 이 컨트롤 을 사용 하 십시오.(그림 을 추가 하 십시오.그렇지 않 으 면 일반적인 EditText 에 해당 합 니 다)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:paddingBottom="@dimen/activity_vertical_margin"
 android:paddingLeft="@dimen/activity_horizontal_margin"
 android:paddingRight="@dimen/activity_horizontal_margin"
 android:paddingTop="@dimen/activity_vertical_margin"
 tools:context="scut.userlogin.RegisterActivity3">

 <scut.userlogin.EditText_PassWordDisplay
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:id="@+id/EditText_PasswordRegisterInput"
 android:inputType="textPassword"
 android:hint="       "
 android:drawableRight="@mipmap/ic_launcher"
 android:layout_marginTop="50dp" />

</RelativeLayout>

Activity 에 서 는 보통 불 러 오기 만 하면 됩 니 다.

 private EditText_PassWordDisplay et_PasswordRegisterInput;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_register3);
 init();
 }

 private void init(){
 et_PasswordRegisterInput = (EditText_PassWordDisplay) findViewById(R.id.EditText_PasswordRegisterInput);

 }

효 과 를 실현 하려 면 그림 을 클릭 하면 Toast 가 나타 납 니 다:

참고 글:
Android 에서 EditText 의 drawableRight 속성 설정 클릭 이벤트
Android 는 EditTex 의 그림 을 감청 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기