国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

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

2019-12-12 04:25:03
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、首先來(lái)看看效果

這是一個(gè)帶有刪除按鈕的輸入文本框, 需要新建一個(gè)類(lèi)繼承自EditText, 先把代碼貼出來(lái), 然后在解釋:

示例代碼如下:

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

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

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

總結(jié)

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

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 茶陵县| 田阳县| 乾安县| 筠连县| 惠州市| 江油市| 双牌县| 阿鲁科尔沁旗| 化州市| 荔波县| 安康市| 旬阳县| 大厂| 那曲县| 深圳市| 德兴市| 通河县| 博客| 阿坝县| 望奎县| 会东县| 左权县| 阿鲁科尔沁旗| 佛学| 当阳市| 施甸县| 正定县| 龙岩市| 云龙县| 阜平县| 临海市| 德清县| 郑州市| 万载县| 镇平县| 佳木斯市| 从化市| 宣武区| 常州市| 惠东县| 和平县|