Android自定義EditText右側(cè)帶圖片控件
前言
最近項(xiàng)目做用戶登錄模塊需要一個(gè)右邊帶圖片的EditText,圖片可以設(shè)置點(diǎn)擊效果,所以就查資料做了一個(gè)自定義EditText出來(lái),方便以后復(fù)用。
原理
下面是自定義EditText的代碼,具體難點(diǎn)是要實(shí)現(xiàn)圖片的點(diǎn)擊監(jiān)聽(tīng),因?yàn)楣雀韫俜街两駴](méi)有給出一個(gè)直接實(shí)現(xiàn)EditText里面圖片的監(jiān)聽(tīng)API。我的做法是整個(gè)控件綁定一個(gè)OnTouchListener,然后監(jiān)測(cè)點(diǎn)擊事件,檢測(cè)點(diǎn)擊位置的X坐標(biāo)是否在圖片的覆蓋范圍內(nèi)(下面getCompoundDrawables()[2]里面的2是代表圖片在EditText的右邊),如果是則執(zhí)行點(diǎn)擊事件。
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 {
//需要實(shí)現(xiàn)下面的幾個(gè)構(gòu)造函數(shù),不然有可能加載不了這個(gè)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)聽(tīng)器
public void init(){
setOnTouchListener(this);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
//如果不是按下操作,就不做處理,如果是按下操作但是沒(méi)有圖片,也不做處理
if (event.getAction() == MotionEvent.ACTION_UP && this.getCompoundDrawables()[2] != null) {
//檢測(cè)點(diǎn)擊區(qū)域的X坐標(biāo)是否在圖片范圍內(nèi)
if (event.getX() > this.getWidth()
- this.getPaddingRight()
- this.getCompoundDrawables()[2].getIntrinsicWidth()) {
//在此做圖片的點(diǎn)擊處理
System.out.println("點(diǎn)擊區(qū)域");
MessageShow.ShowToast(getContext(), "點(diǎn)擊了圖片");
}
return false;
}
return false;
}
}
只需要在xml里使用這個(gè)控件(記得加上圖片,不然的話就相當(dāng)于一個(gè)普通的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="請(qǐng)輸入登錄密碼" 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);
}
實(shí)現(xiàn)效果,點(diǎn)擊圖片就會(huì)出現(xiàn)Toast:

參考文章:
Android中EditText的drawableRight屬性設(shè)置點(diǎn)擊事件
Android對(duì)EditTex的圖片實(shí)現(xiàn)監(jiān)聽(tīng)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android如何禁止向EditText控件中輸入內(nèi)容詳解
- Android編程實(shí)現(xiàn)點(diǎn)擊EditText之外的控件隱藏軟鍵盤(pán)功能
- android如何改變editText控件中部分文字的格式
- Android開(kāi)發(fā)中給EditText控件添加TextWatcher監(jiān)聽(tīng)實(shí)現(xiàn)對(duì)輸入字?jǐn)?shù)的限制(推薦)
- Android帶清除功能的輸入框控件EditTextWithDel
- Android輸入框控件ClearEditText實(shí)現(xiàn)清除功能
- Android實(shí)現(xiàn)EditText控件禁止輸入內(nèi)容的方法(附測(cè)試demo)
- Android控件系列之EditText使用方法
- Android自定義控件EditText使用詳解
相關(guān)文章
Android 實(shí)現(xiàn)抖音頭像底部彈框效果的實(shí)例代碼
這篇文章主要介紹了Android 實(shí)現(xiàn)抖音頭像底部彈框效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
Android實(shí)現(xiàn)簡(jiǎn)單MD5加密的方法
這篇文章主要介紹了Android實(shí)現(xiàn)簡(jiǎn)單MD5加密的方法,涉及Android編碼操作及加密的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-08-08
Android開(kāi)發(fā)自定義TextView省略號(hào)樣式的方法
Android大作業(yè)功能設(shè)計(jì)之自動(dòng)登錄和記住密碼
基于Android SQLiteOpenHelper && CRUD 的使用
Android使用DocumentFile讀寫(xiě)外置存儲(chǔ)的問(wèn)題
Android使用文件進(jìn)行數(shù)據(jù)存儲(chǔ)的方法

