public class ClearEditText extends AppCompatEditText implements
View.OnFocusChangeListener, TextWatcher {
/**
* 刪除按鈕的引用
*/
private Drawable mClearDrawable;
/**
* 控件是否有焦點
*/
private boolean hasFoucs;
private boolean isShow = false;
public ClearEditText(Context context) {
this(context, null);
}
public ClearEditText(Context context, AttributeSet attrs) {
//這里構(gòu)造方法也很重要耀销,不加這個很多屬性不能再XML里面定義
this(context, attrs, android.R.attr.editTextStyle);
}
public ClearEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
//獲取EditText的DrawableRight,假如沒有設(shè)置我們就使用默認的圖片,getCompoundDrawables()獲取Drawable的四個位置的數(shù)組
mClearDrawable = getCompoundDrawables()[2];
if (mClearDrawable == null) {
mClearDrawable = getResources().getDrawable(R.drawable.delete);
// throw new NullPointerException("You can add drawableRight attribute in XML");
}
//設(shè)置圖標的位置以及大小
mClearDrawable.setBounds(0, 0, 50, 50);
//默認設(shè)置隱藏圖標
setClearIconVisible(false);
//設(shè)置焦點改變的監(jiān)聽
setOnFocusChangeListener(this);
//設(shè)置輸入框里面內(nèi)容發(fā)生改變的監(jiān)聽
addTextChangedListener(this);
}
/**
* 因為我們不能直接給EditText設(shè)置點擊事件,所以我們用記住我們按下的位置來模擬點擊事件
* 當我們按下的位置 在 EditText的寬度 - 圖標到控件右邊的間距 - 圖標的寬度 和
* EditText的寬度 - 圖標到控件右邊的間距之間我們就算點擊了圖標,豎直方向就沒有考慮
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
if (getCompoundDrawables()[2] != null) {
//getTotalPaddingRight()圖標左邊緣至控件右邊緣的距離
//getWidth() - getTotalPaddingRight()表示從最左邊到圖標左邊緣的位置
//getWidth() - getPaddingRight()表示最左邊到圖標右邊緣的位置
boolean touchable = event.getX() > (getWidth() - getTotalPaddingRight())
&& (event.getX() < ((getWidth() - getPaddingRight())));
if (touchable) {
this.setText("");
}
}
// if(getCompoundDrawables()[0] != null){
// boolean touchLeft = event.getX()>0 && event.getX()<getCompoundDrawables()[0].getIntrinsicWidth();
// if(touchLeft){
// if(isShow==false){
// isShow = true;
// //設(shè)置為可見
// this.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
// }else{
// isShow = false;
// //設(shè)置為密碼模式
// this.setTransformationMethod(PasswordTransformationMethod.getInstance());
// }
// }
// }
}
return super.onTouchEvent(event);
}
/**
* 當ClearEditText焦點發(fā)生變化的時候澄干,判斷里面字符串長度設(shè)置清除圖標的顯示與隱藏
*/
@Override
public void onFocusChange(View v, boolean hasFocus) {
this.hasFoucs = hasFocus;
if (hasFocus) {
setClearIconVisible(getText().length() > 0);
} else {
setClearIconVisible(false);
}
}
/**
* 設(shè)置清除圖標的顯示與隱藏,調(diào)用setCompoundDrawables為EditText繪制上去
*
* @param visible
*/
protected void setClearIconVisible(boolean visible) {
Drawable right = visible ? mClearDrawable : null;
setCompoundDrawables(getCompoundDrawables()[0],
getCompoundDrawables()[1], right, getCompoundDrawables()[3]);
}
/**
* 當輸入框里面內(nèi)容發(fā)生變化的時候回調(diào)的方法
*/
@Override
public void onTextChanged(CharSequence s, int start, int count,
int after) {
if (hasFoucs) {
setClearIconVisible(s.length() > 0);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
}````
帶刪除按鈕的edittext
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涛贯,“玉大人诽嘉,你說我怎么就攤上這事〉芮蹋” “怎么了虫腋?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長稀余。 經(jīng)常有香客問我悦冀,道長,這世上最難降的妖魔是什么睛琳? 我笑而不...
- 正文 為了忘掉前任盒蟆,我火速辦了婚禮,結(jié)果婚禮上师骗,老公的妹妹穿的比我還像新娘历等。我一直安慰自己,他們只是感情好丧凤,可當我...
- 文/花漫 我一把揭開白布募闲。 她就那樣靜靜地躺著步脓,像睡著了一般愿待。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上靴患,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼囱挑!你這毒婦竟也來了醉顽?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布隐解,位于F島的核電站鞍帝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏煞茫。R本人自食惡果不足惜帕涌,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望续徽。 院中可真熱鬧蚓曼,春花似錦、人聲如沸钦扭。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽客情。三九已至其弊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間膀斋,已是汗流浹背梭伐。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 前言 為了提升用戶體驗贮尉,很多時候我們都需要在輸入框后面添加“一鍵清空”按鈕拌滋,比如輸入賬號密碼時。實現(xiàn)起來也很簡單绘盟,...
- 一個帶刪除按鈕的 EditText 在各種 APP 中隨處可見鸠真,比如悯仙,搜索框、登錄時用戶名與密碼的輸入框等等吠卷。在沒...
- 輸入框帶刪除按鈕, 此乃標配, 實現(xiàn)起來方法也很多, 網(wǎng)上開源也很多. 但是, 沒事就喜歡瞎折騰. 上圖說話. 只...
- 漫天星月難掩一劍橫虛锡垄,千里湖光不敵一笑嫣然。 是夜祭隔,一道碧虹貫穿三界货岭,從西北太虛沖入北元泫溟神洲。 無數(shù)人注目疾渴,以...