欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實(shí)現(xiàn)帶有刪除按鈕的EditText示例代碼

 更新時(shí)間:2016年12月07日 10:50:26   作者:DongBold  
本文給大家介紹一個(gè)很實(shí)用的小控件,就是在Android系統(tǒng)的輸入框右邊加入一個(gè)小圖標(biāo),點(diǎn)擊小圖標(biāo)可以清除輸入框里面的內(nèi)容,IOS上面直接設(shè)置某個(gè)屬性就可以實(shí)現(xiàn)這一功能,但是Android原生EditText不具備此功能,所以要想實(shí)現(xiàn)這一功能我們需要重寫EditText。下面來看看吧。

一、首先來看看效果

這是一個(gè)帶有刪除按鈕的輸入文本框, 需要新建一個(gè)類繼承自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();
 }

 // 設(shè)置刪除圖片
 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)這個(gè)名字賊長的方法, 雖然名字很長, 其實(shí)這個(gè)方法用起來和簡單, 就是設(shè)置左上右下的圖片, 這個(gè)dome只需要設(shè)置右邊的就行了, 可以看一下全部設(shè)置的效果

接著就是還要監(jiān)聽Touch, 這里要說一下getRawX()getX()的區(qū)別, getRawX()或者getRawY()方法是以屏幕為參考, getX()getY()方法是以容器為參考, 所以二者得到的值可能不一樣. 之后在利用getGlobalVisibleRect()方法得到視圖的位置, 存放到rect中, 這里是以屏幕左上角為起點(diǎn)的, 所以前面用的是getRaw方法.

當(dāng)然也可以 使用getLocalVisibleRect方法, 這個(gè)方法是以View的左上角為起點(diǎn)的, 所以用這個(gè)方法的話, 就得使用getX()getY()方法來或獲取觸摸點(diǎn)的x和y值了.

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)各位Android開發(fā)者們能有所幫助,如果有疑問大家可以留言交流。

相關(guān)文章

最新評(píng)論