為EditText右側新增刪除按鈕
阿新 • • 發佈:2019-01-29
為EditText 新增刪除功能,如下:
實現步驟:
1. 為EditText設定android:drawableRight="@drawable/ic_cab_done_holo"屬
性, ic_cab_done_holo是刪除按鈕的背景圖片。
2. 自定義EditText繼承EditText。
3. 重寫setCompoundDrawables方法,在setCompoundDrawables方法中獲取
ic_cab_done_holo的 Drawable物件。
4. 在onTextChanged方法中監聽EditText中的內容,根據內容是否為空,通過
setCompoundDrawables方法設定 ic_cab_done_holo是否顯示。
程式碼如下:
需求:
EditText 中沒有內容時,刪除按鈕隱藏,當EditText中輸入內容時,刪除按鈕
顯示出來,點選刪除按鈕,EditText中的內容被清空。實現步驟:
1. 為EditText設定android:drawableRight="@drawable/ic_cab_done_holo"屬
性, ic_cab_done_holo是刪除按鈕的背景圖片。
2. 自定義EditText繼承EditText。
3. 重寫setCompoundDrawables方法,在setCompoundDrawables方法中獲取
ic_cab_done_holo的 Drawable物件。
4. 在onTextChanged方法中監聽EditText中的內容,根據內容是否為空,通過
setCompoundDrawables方法設定 ic_cab_done_holo是否顯示。
程式碼如下:
import android.content.Context; import android.graphics.drawable.Drawable; import android.text.Editable; import android.text.TextWatcher; import android.util.AttributeSet; import android.widget.EditText; public class DWEditText extends EditText { private Drawable mDrawable; public DWEditText(Context context) { super(context); initDWEditText(); } public DWEditText(Context context, AttributeSet attrs) { super(context, attrs); initDWEditText(); } public DWEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initDWEditText(); } private void initDWEditText() { setEditTextVisible(); addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { setEditTextVisible(); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }); } private void setEditTextVisible() { if(getText().toString().length() == 0){ setCompoundDrawables(null, null, null, null); } else { setCompoundDrawables(null, null, mDrawable, null); } } @Override public void setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom) { if(right!=null){ mDrawable = right; } super.setCompoundDrawables(left, top, right, bottom); } }