2016-07-01 4 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

을 구현하지 않아야을 시도,하지만 'View'를 자체 OnTouchListener로 설정합니다. 그것은 모두 불필요한 것입니다. 'View'의'onTouchEvent()'메소드를 무시하십시오. –

+0

@MikeM. 코드가 편집되었습니다. 아직 작동하지 않습니다. –

+0

글쎄, 몇 가지 잘못되었을 수 있습니다. 하나의 생성자 만 구현 중입니다. 당신은'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

당신은`OnTouchListener` 인터페이스를 구현했습니다
관련 문제