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) {
}
});
}
}
Вы реализовали 'OnTouchListener' интерфейс, но вы никогда установите 'View' как собственный' OnTouchListener'. Однако это все лишнее. Просто переопределите метод 'onTouchEvent()' View'. –
@MikeM. Код отредактирован. Все еще не работает –
Ну, есть несколько вещей, которые могут быть неправильными. Вы реализуете только один конструктор. Вы уверены, что «View» создается с этим? Вы уверены, что этот класс на самом деле используется? Вы уверены, что этот «Просмотр» не закрыт/заблокирован другим? Кроме того, я бы по-прежнему рекомендовал вам не устанавливать 'OnTouchListener', а скорее переопределять' onTouchEvent() '. И janki делает хороший пункт ниже. Знаете ли вы, что вам нужно искать в вашем логарифме? –