Android自定義EditText右側(cè)帶圖片控件
前言
最近項目做用戶登錄模塊需要一個右邊帶圖片的EditText,圖片可以設(shè)置點擊效果,所以就查資料做了一個自定義EditText出來,方便以后復(fù)用。
原理
下面是自定義EditText的代碼,具體難點是要實現(xiàn)圖片的點擊監(jiān)聽,因為谷歌官方至今沒有給出一個直接實現(xiàn)EditText里面圖片的監(jiān)聽API。我的做法是整個控件綁定一個OnTouchListener,然后監(jiān)測點擊事件,檢測點擊位置的X坐標(biāo)是否在圖片的覆蓋范圍內(nèi)(下面getCompoundDrawables()[2]里面的2是代表圖片在EditText的右邊),如果是則執(zhí)行點擊事件。
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 { //需要實現(xiàn)下面的幾個構(gòu)造函數(shù),不然有可能加載不了這個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(); } //初始化控件,綁定監(jiān)聽器 public void init(){ setOnTouchListener(this); } @Override public boolean onTouch(View v, MotionEvent event) { //如果不是按下操作,就不做處理,如果是按下操作但是沒有圖片,也不做處理 if (event.getAction() == MotionEvent.ACTION_UP && this.getCompoundDrawables()[2] != null) { //檢測點擊區(qū)域的X坐標(biāo)是否在圖片范圍內(nèi) if (event.getX() > this.getWidth() - this.getPaddingRight() - this.getCompoundDrawables()[2].getIntrinsicWidth()) { //在此做圖片的點擊處理 System.out.println("點擊區(qū)域"); MessageShow.ShowToast(getContext(), "點擊了圖片"); } return false; } return false; } }
只需要在xml里使用這個控件(記得加上圖片,不然的話就相當(dāng)于一個普通的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); }
實現(xiàn)效果,點擊圖片就會出現(xiàn)Toast:
參考文章:
Android中EditText的drawableRight屬性設(shè)置點擊事件
Android對EditTex的圖片實現(xiàn)監(jiān)聽
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android如何禁止向EditText控件中輸入內(nèi)容詳解
- Android編程實現(xiàn)點擊EditText之外的控件隱藏軟鍵盤功能
- android如何改變editText控件中部分文字的格式
- Android開發(fā)中給EditText控件添加TextWatcher監(jiān)聽實現(xiàn)對輸入字?jǐn)?shù)的限制(推薦)
- Android帶清除功能的輸入框控件EditTextWithDel
- Android輸入框控件ClearEditText實現(xiàn)清除功能
- Android實現(xiàn)EditText控件禁止輸入內(nèi)容的方法(附測試demo)
- Android控件系列之EditText使用方法
- Android自定義控件EditText使用詳解
相關(guān)文章
仿墨跡天氣在Android App中實現(xiàn)自定義zip皮膚更換
這篇文章主要介紹了仿墨跡天氣在Android App中實現(xiàn)自定義zip皮膚更換的方法,即讓用戶可以自行通過自制或者下載的zip皮膚包進(jìn)行換膚,需要的朋友可以參考下2016-02-02Android webview如何加載HTML,CSS等語言的示例
本篇文章主要介紹了Android webview如何加載HTML,CSS等語言的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11Android ListView與RecycleView的對比使用解析
這篇文章主要介紹了Android ListView與RecycleView的對比使用解析,需要的朋友可以參考下2017-12-12