2016-07-01 4 views
2

Я создал настраиваемый editText. Его onTouchListner вообще не звонит. Какова может быть причина? OnClickListener также не вызывает, однако addtextchangedlister работает нормально. здесь код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'. Однако это все лишнее. Просто переопределите метод 'onTouchEvent()' View'. –

+0

@MikeM. Код отредактирован. Все еще не работает –

+0

Ну, есть несколько вещей, которые могут быть неправильными. Вы реализуете только один конструктор. Вы уверены, что «View» создается с этим? Вы уверены, что этот класс на самом деле используется? Вы уверены, что этот «Просмотр» не закрыт/заблокирован другим? Кроме того, я бы по-прежнему рекомендовал вам не устанавливать 'OnTouchListener', а скорее переопределять' onTouchEvent() '. И janki делает хороший пункт ниже. Знаете ли вы, что вам нужно искать в вашем логарифме? –

ответ

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

Смежные вопросы