1. 程式人生 > >EditText新增drawableXXX的點選事件

EditText新增drawableXXX的點選事件

  • EditText提供了drawableXXX屬性來設定控制元件的個位置的圖片顯示,但是沒有提供響應的點選事件處理。
  • 首先要考慮的問題是如何在java程式碼中獲取點選的範圍是否在圖示範圍內。getTotalPaddingXXX方法提供了包含drawableXXX在內的距離,而getPaddingXXX返回檢視距響應方向的距離。所以就可以判斷是否在圖示內點選。
  • boolean touchable = event.getX() > (getWidth() - getTotalPaddingRight())&& (event.getX() < ((getWidth() - getPaddingRight())));
  • 所以重寫onTouchEvent方法,我需要根據當前輸入型別來判斷是否需要明暗文切換
  • public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            if (getCompoundDrawables()[2] != null) {
    
                boolean touchable = event.getX() > (getWidth() - getTotalPaddingRight())
                        && (event
    .getX() < ((getWidth() - getPaddingRight()))); if (touchable) { if(getInputType()==InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD+InputType.TYPE_CLASS_TEXT){ setCompoundDrawables(null, null, mRightDrawableSelect, null); setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); //view.setText(view.getText().toString());
    }else{ setCompoundDrawables(null, null, mRightDrawableUnSelect, null); setInputType(InputType.TYPE_CLASS_TEXT |InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); } setSelection(getText().length()); } } } return super.onTouchEvent(event); }
  • 最好還是通過介面的形式讓外部傳入相應的點選事件。