1. 程式人生 > >Android AutoCompleteTextView 增加刪除按鈕清除內容

Android AutoCompleteTextView 增加刪除按鈕清除內容

AutoCompleteTextView  是android 官方的控制元件,比edittext好用,功能也更強大,主要是用於完成輸入框的歷史記錄和人性化的提示功能。但沒有右邊X按鈕清除功能,所以只能自己新增,網上很多都是自定義一個,對於已經加入AutoCompleteTextView  的同學,更換也很麻煩,其實只需要java程式碼設定一下也可以實現,邏輯不太完善的多包涵。

直接上圖:

private AutoCompleteTextView mCommodity_actv;

private InputMethodManager m;

mCommodity_actv.addTextChangedListener(new TextWatcher() {


@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
if(s.length()==0){

mCommodity_actv.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.search), null, null, null);

//注意剛開始使用的是setCompoundDrawables方法就沒有用,不知道為什麼

}else{
mCommodity_actv.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.search), null, getResources().getDrawable(R.drawable.searchclear), null);

}
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub

}

@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub

}
});
mCommodity_actv.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {

// TODO Auto-generated method stub

 m=(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
 if(mCommodity_actv.isFocused()){
m.showSoftInput(mCommodity_actv, InputMethodManager.SHOW_FORCED);
}

final int DRAWABLE_RIGHT = 2;  
       //可以獲得上下左右四個drawable,右側排第二。圖示沒有設定則為空。  
       Drawable rightIcon = mCommodity_actv.getCompoundDrawables()[DRAWABLE_RIGHT];  
       if (rightIcon != null && event.getAction() == MotionEvent.ACTION_UP) {  
           //檢查點選的位置是否是右側的刪除圖示  
           //注意,使用getRwwX()是獲取相對螢幕的位置,getX()可能獲取相對父元件的位置  
           int leftEdgeOfRightDrawable = mCommodity_actv.getRight() - mCommodity_actv.getPaddingRight()  
                   - rightIcon.getBounds().width();  
           if (event.getRawX() >= leftEdgeOfRightDrawable) {  
               mCommodity_actv.setText("");  
           }  
       }  
       return true;  
}

});

紅色部分我開始沒有加,導致不能彈出輸入法,原因是:mCommodity_actv.setOnTouchListener  後就會出現這樣的問題。(注意

當然你也可以控制關閉方法是:

if(m.isActive(mCommodity_actv)){

m.hideSoftInputFromWindow(mCommodity_actv.getWindowToken(), 0);

}