Я добавил изображение справа от текста в виджет EditText , используя следующий XML:
<EditText
android:id="@+id/txtsearch"
...
android:layout_gravity="center_vertical"
android:background="@layout/shape"
android:hint="Enter place,city,state"
android:drawableRight="@drawable/cross" />
Но я хочу очистить EditText
при нажатии на встроенное изображение. Как я могу это сделать?
Учтите следующее. Это не самое элегантное решение, но оно работает, я только что проверил его.
Создайте настраиваемый класс EditText
CustomEditText.java
:
import android.content.Context;
импортировать android.graphics.Rect;
импортировать android.graphics.drawable.Drawable;
импортировать android.util.AttributeSet;
импортировать android.view.MotionEvent;
импортировать android.widget.Редактировать текст;
открытый класс CustomEditText расширяет EditText
{
частное право на выдвижение;
частные прямоугольники rBounds;
public CustomEditText (контекст контекста, атрибуты AttributeSet, int defStyle) {
супер(контекст, атрибуты, стиль определения);
}
public CustomEditText (контекст контекста, атрибуты AttributeSet) {
супер(контекст, атрибуты);
}
public CustomEditText (контекст контекста) {
супер(контекст);
}
@Override
public void setCompoundDrawables (рисуемый слева, рисуемый сверху,
Drawable справа, Drawable снизу)
{
если (правильно! = ноль)
{
dПраво = правильно;
}
super.setCompoundDrawables (слева, сверху, справа, снизу);
}
@Override
общественное логическое значение onTouchEvent (событие MotionEvent)
{
if(event.getAction() == MotionEvent.ACTION_UP && dRight!=null)
{
rBounds = dRight.getBounds();
окончательный int x = (int)event.getX();
окончательный int y = (int)event.getY();
//System.out.println("x:/y: "+x+"/"+y);
//System.out.println("bounds: "+bounds.left+"/"+bounds.right+"/"+bounds.top+"/"+bounds.bottom);
//проверить, чтобы событие касания находилось в пределах отрисовываемого
if(x>=(this.getRight()-rBounds.width()) && x<=(this.getRight()-this.getPaddingRight())
&& y>=this.getPaddingTop() && y<=(this.getHeight()-this.getPaddingBottom()))
{
//System.out.println("touch");
этот.setText("");
event.setAction(MotionEvent.ACTION_CANCEL);//используйте это, чтобы предотвратить появление клавиатуры
}
}
вернуть super.onTouchEvent (событие);
}
@Override
protected void finalize() выбрасывает Throwable
{
dRight = ноль;
rBounds = ноль;
супер.финализировать();
}
}
Измените XML макета на этот (где com.example
— ваше фактическое имя пакета проекта):
Наконец, добавьте это (или что-то подобное) в свою активность:
…
CustomEditText et = (CustomEditText) this.findViewById(R.id.txtsearch);
…
Возможно, я немного ошибся с расчетом границ касания для вложенных рисунков, но вы поняли идею.
Надеюсь, это поможет.