2016-07-01 71 views
2

我已經創建了自定義的editText。它的onTouchListner根本沒有調用。 可能是什麼原因? OnClickListener也沒有調用,但是addtextchangedlistener工作正常。 這裏是代碼EditText onTouchListener不工作

public class MyEditText extends EditText implements OnTouchListener{ 
    private static final int MAX_LENGTH = 13; 
    String value = ""; 
    final String viewMode = "editing"; 
    final String viewSide = "right"; 
    final Drawable x; 
    @SuppressLint("ClickableViewAccessibility") 
    public MyEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     x = getResources().getDrawable(R.drawable.clear); 
     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
      this.setBackgroundResource(android.R.drawable.edit_text); 
     } 

     setOnEditorActionListener(new OnEditorActionListener() { 
      @Override 
      public synchronized boolean onEditorAction(TextView v, 
        int actionId, KeyEvent event) { 
       if (event.getAction() == KeyEvent.ACTION_DOWN 
         && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { 
        return true; 
       } 
       return false; 
      } 
     }); 
setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      System.out.println("=====ontouchhhh"); 
      if (getCompoundDrawables()[viewSide.equals("left") ? 0 : 2] == null) { 
       return false; 
      } 
      if (event.getAction() != MotionEvent.ACTION_UP) { 
       return false; 
      } 
      // x pressed 
      if ((viewSide.equals("left") && event.getX() < getPaddingLeft() 
        + x.getIntrinsicWidth()) 
        || (viewSide.equals("right") && event.getX() > getWidth() 
          - getPaddingRight() - x.getIntrinsicWidth())) { 
       Drawable x3 = viewMode.equals("never") ? null : viewMode 
         .equals("always") ? x 
         : viewMode.equals("editing") ? null : viewMode 
           .equals("unlessEditing") ? x : null; 
       System.out.println("=====cleared"); 
       setText(""); 
       setCompoundDrawables(null, null, 
         viewSide.equals("right") ? x3 : null, null); 
      } 
      return true; 
     } 
    }); 



     // The height will be set the same with [X] icon 
     setHeight(x.getBounds().height()); 

     x.setBounds(0, 0, x.getIntrinsicWidth(), x.getIntrinsicHeight()); 
     Drawable x2 = viewMode.equals("never") ? null : viewMode 
       .equals("always") ? x : viewMode.equals("editing") ? (value 
       .equals("") ? null : x) 
       : viewMode.equals("unlessEditing") ? (value.equals("") ? x 
         : null) : null; 
     // #25317: Display search icon in text field 
     final Drawable searchIcon = getResources().getDrawable(
       android.R.drawable.ic_search_category_default); 
     searchIcon.setBounds(0, 0, x.getIntrinsicWidth(), 
       x.getIntrinsicHeight()); 

     setCompoundDrawables(null, null, viewSide.equals("right") ? x2 
       : null, null); 

setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     System.out.println("===onclick"); 
    } 
}); 


     addTextChangedListener(new TextWatcher() { 
      @Override 
      public void onTextChanged(CharSequence s, int start, int before, 
        int count) { 
       Drawable x4 = viewMode.equals("never") ? null : viewMode 
         .equals("always") ? x 
         : viewMode.equals("editing") ? (getText().toString() 
           .equals("") ? null : x) : viewMode 
           .equals("unlessEditing") ? (getText() 
           .toString().equals("") ? x : null) : null; 
       setCompoundDrawables(null, null, 
         viewSide.equals("right") ? x4 : null, null); 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       if (s != null && s.length() > MAX_LENGTH) { 
        setText(s.subSequence(0, MAX_LENGTH)); 
        setSelection(MAX_LENGTH); 
       } 
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
      } 
     }); 
    } 


} 
+3

你已經實現了'OnTouchListener'接口,但你永遠不將'View'設置爲它自己的'OnTouchListener'。儘管如此,這是不必要的。只需重寫'View'的'onTouchEvent()'方法即可。 –

+0

@MikeM。代碼編輯。仍然沒有工作 –

+0

好吧,有幾件事情可能是錯誤的。你只實現一個構造函數。你確定'View'正在被實例化嗎?你確定這個班級實際上是在使用什麼嗎?你確定這個'View'沒有被另一個人遮擋/阻擋嗎?另外,我仍然建議你不要設置'OnTouchListener',而是覆蓋'onTouchEvent()'。 Janki在下面說得很好。你知道你應該在你的logcat中尋找什麼? –

回答

0

您的代碼糾結 但是你試試這個代碼

editText.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 

      switch (event.getAction()){ 

       case MotionEvent.ACTION_DOWN: 
        //your code 
        break; 

       case MotionEvent.ACTION_UP: 
        //your code 
        break; 

       case MotionEvent.ACTION_MOVE: 
        //your code 
        break; 

        default: 
      } 

      return true; 
     } 
}); 

你不能實施OnTouchListener

相關問題