Android 自定義EditText輸入框帶清空按鈕
更新時間:2017年05月18日 11:00:17 投稿:lqh
這篇文章主要介紹了Android 自定義EditText輸入框帶清空按鈕的相關資料,需要的朋友可以參考下
Android 自定義EditText輸入框帶清空按鈕
當用戶輸入字符后 EditText會自動在輸入框的內(nèi)部右側出現(xiàn)刪除按鈕
重寫EditText達到簡化布局的效果
效果圖:

繼承EditText
package com.example.myedittexttest;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.EditText;
public class MyEditText extends EditText {
private final String TAG = "MyEditText";
private Drawable dRight;
private Rect rBounds;
public MyEditText(Context paramContext) {
super(paramContext);
initEditText();
}
public MyEditText(Context paramContext, AttributeSet paramAttributeSet) {
super(paramContext, paramAttributeSet);
initEditText();
}
public MyEditText(Context paramContext, AttributeSet paramAttributeSet, int paramInt) {
super(paramContext, paramAttributeSet, paramInt);
initEditText();
}
// 初始化edittext 控件
private void initEditText() {
setEditTextDrawable();
addTextChangedListener(new TextWatcher() { // 對文本內(nèi)容改變進行監(jiān)聽
@Override
public void afterTextChanged(Editable paramEditable) {
}
@Override
public void beforeTextChanged(CharSequence paramCharSequence, int paramInt1, int paramInt2, int paramInt3) {
}
@Override
public void onTextChanged(CharSequence paramCharSequence, int paramInt1, int paramInt2, int paramInt3) {
MyEditText.this.setEditTextDrawable();
}
});
}
// 控制圖片的顯示
public void setEditTextDrawable() {
if (getText().toString().length() == 0) {
setCompoundDrawables(null, null, null, null);
} else {
setCompoundDrawables(null, null, this.dRight, null);
}
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
this.dRight = null;
this.rBounds = null;
}
/**
* 添加觸摸事件 點擊之后 出現(xiàn) 清空editText的效果
*/
@Override
public boolean onTouchEvent(MotionEvent paramMotionEvent) {
if ((this.dRight != null) && (paramMotionEvent.getAction() == 1)) {
this.rBounds = this.dRight.getBounds();
int i = (int) paramMotionEvent.getRawX();// 距離屏幕的距離
// int i = (int) paramMotionEvent.getX();//距離邊框的距離
if (i > getRight() - 3 * this.rBounds.width()) {
setText("");
paramMotionEvent.setAction(MotionEvent.ACTION_CANCEL);
}
}
return super.onTouchEvent(paramMotionEvent);
}
/**
* 顯示右側X圖片的
*
* 左上右下
*/
@Override
public void setCompoundDrawables(Drawable paramDrawable1, Drawable paramDrawable2, Drawable paramDrawable3, Drawable paramDrawable4) {
if (paramDrawable3 != null)
this.dRight = paramDrawable3;
super.setCompoundDrawables(paramDrawable1, paramDrawable2, paramDrawable3, paramDrawable4);
}
}
XML布局:
<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=".MainActivity" >
<com.example.myedittexttest.MyEditText
android:id="@+id/edit_text"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:layout_marginTop="50dp"
android:background="#88aaff"
android:drawableRight="@drawable/edit_clear"
android:textCursorDrawable="@null" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/edit_text"
android:layout_marginTop="84dp"
android:layout_toRightOf="@+id/textView1"
android:text="Button" />
</RelativeLayout>
XML中的屬性簡介:
顯示右側的X 按鈕:
android:drawableRight="@drawable/edit_clear"
設置光標的顏色 設置@null 表示光標的顏色和輸入框的字體顏色相同
android:textCursorDrawable="@null"
顯示隱藏光標
android:cursorVisible="true"http://顯示 android:cursorVisible="false"http://隱藏
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
Android自定義View 實現(xiàn)水波紋動畫引導效果
在android程序開發(fā)中,我們經(jīng)常簡單通過自定義view實現(xiàn)水波紋動畫引導功能,下面通過本文給大家分享實現(xiàn)代碼,需要的朋友參考下2017-01-01
Android實現(xiàn)在ServiceManager中加入自定義服務的方法詳解
這篇文章主要介紹了Android實現(xiàn)在ServiceManager中加入自定義服務的方法,結合實例形式分析了Android開發(fā)中ServiceManager自定義服務的相關創(chuàng)建與使用方法,需要的朋友可以參考下2017-08-08
Android開發(fā)入門之Notification用法分析
這篇文章主要介紹了Android中Notification用法,較為詳細的分析了Notification的功能、使用步驟與相關注意事項,需要的朋友可以參考下2016-07-07
Android App數(shù)據(jù)格式Json解析方法和常見問題
JSON數(shù)據(jù)格式,在Android中被廣泛運用于客戶端和網(wǎng)絡(或者說服務器)通信,非常有必要系統(tǒng)的了解學習。恰逢本人最近對json做了一個簡單的學習,特此總結一下,以饗各位2014-03-03
Android ListView彈性效果的實現(xiàn)方法
這篇文章主要為大家詳細介紹了Android ListView彈性效果的實現(xiàn)方法,感興趣的小伙伴們可以參考一下2016-05-05

