Android實現(xiàn)帶有刪除按鈕的EditText示例代碼
一、首先來看看效果
這是一個帶有刪除按鈕的輸入文本框, 需要新建一個類繼承自EditText, 先把代碼貼出來, 然后在解釋:
示例代碼如下:
public class EditTextWithDel extends EditText { private final static String TAG = "EditTextWithDel"; private Drawable imgInable; private Context mContext; public EditTextWithDel(Context context) { this(context, null, 0); } public EditTextWithDel(Context context, AttributeSet attrs) { this(context, attrs, 0); } public EditTextWithDel(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mContext = context; init(); } private void init() { imgInable = mContext.getResources().getDrawable(android.R.drawable.ic_delete); addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void afterTextChanged(Editable editable) { setDrawable(); } }); setDrawable(); } // 設置刪除圖片 private void setDrawable() { if (length() < 1) { setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); } else { setCompoundDrawablesWithIntrinsicBounds(null, null, imgInable, null); } } // 處理刪除操作 @Override public boolean onTouchEvent(MotionEvent event) { if (imgInable != null && event.getAction() == MotionEvent.ACTION_UP) { int eventX = (int) event.getRawX(); int eventY = (int) event.getRawY(); Log.d(TAG, "(" + eventX + ", " + eventY + ")"); Rect rect = new Rect(); getGlobalVisibleRect(rect); rect.left = rect.right - 70; Log.d(TAG, rect.toString()); if (rect.contains(eventX, eventY)) { setText(""); } } return super.onTouchEvent(event); } @Override protected void finalize() throws Throwable { super.finalize(); } }
解釋如下
首先看一下setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom)
這個名字賊長的方法, 雖然名字很長, 其實這個方法用起來和簡單, 就是設置左上右下的圖片, 這個dome只需要設置右邊的就行了, 可以看一下全部設置的效果
接著就是還要監(jiān)聽Touch, 這里要說一下getRawX()
和getX()
的區(qū)別, getRawX()
或者getRawY()
方法是以屏幕為參考, getX()
和getY()
方法是以容器為參考, 所以二者得到的值可能不一樣. 之后在利用getGlobalVisibleRect()
方法得到視圖的位置, 存放到rect中, 這里是以屏幕左上角為起點的, 所以前面用的是getRaw方法.
當然也可以 使用getLocalVisibleRect方法, 這個方法是以View的左上角為起點的, 所以用這個方法的話, 就得使用getX()
和getY()
方法來或獲取觸摸點的x和y值了.
總結
以上就是這篇文章的全部內容了,希望本文的內容對各位Android開發(fā)者們能有所幫助,如果有疑問大家可以留言交流。
- Android 自定義EditText輸入框帶清空按鈕
- Android 帶有刪除按鈕的EditText
- Android如何自定義EditText下劃線?
- Android EditText自定義樣式的方法
- Android UI設計系列之自定義EditText實現(xiàn)帶清除功能的輸入框(3)
- Android自定義EditText右側帶圖片控件
- Android中自定義的dialog中的EditText無法彈出輸入法解決方案
- Android如何自定義EditText光標與下劃線顏色詳解
- Android實現(xiàn)自定義帶刪除功能的EditText實例
- Android開發(fā)實現(xiàn)帶清空按鈕的EditText示例
相關文章
Android自定義對話框Dialog的簡單實現(xiàn)
這篇文章主要為大家詳細介紹了Android自定義對話框Dialog的簡單實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08Android實用小技巧之利用Lifecycle寫出更好維護的代碼
lifecycle是一個類,用于存儲有關組件(如Activity或Fragment)的生命周期狀態(tài)的信息,并允許其他對象觀察此狀態(tài),下面這篇文章主要給大家介紹了關于Android實用小技巧之利用Lifecycle寫出更好維護的代碼的相關資料,需要的朋友可以參考下2022-05-05Android使用HorizontalScrollView實現(xiàn)水平滾動
這篇文章主要為大家詳細介紹了Android使用HorizontalScrollView實現(xiàn)水平滾動,并點擊有相應的反應效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-11-11Android實現(xiàn)的可以調整透明度的圖片查看器實例
這篇文章主要介紹了Android實現(xiàn)的可以調整透明度的圖片查看器,需要的朋友可以參考下2014-07-07Kotlin Select協(xié)程多路復用的實現(xiàn)詳解
select是Kotlin 1.6中的特性,即選擇最快的結果。select與async、Channel結合使用,可以大大提高程序的響應速度,還可以提高程序的靈活性、擴展性2022-09-09