如何给Android AppTextView中的Drawable添加点击事件
时间: 2024-06-09 22:05:25 浏览: 114
可以使用以下步骤为Android App中的TextView中的Drawable添加点击事件:
1. 创建一个自定义的DrawableClickListener类,该类实现了View.OnClickListener接口。
```java
public class DrawableClickListener implements View.OnClickListener {
public enum DrawablePosition { TOP, BOTTOM, LEFT, RIGHT };
DrawablePosition drawablePosition;
public DrawableClickListener(DrawablePosition drawablePosition) {
super();
this.drawablePosition = drawablePosition;
}
@Override
public void onClick(View v) {
if (drawableClickListener != null) {
drawableClickListener.onClick(drawablePosition);
}
}
public interface DrawableClickListener {
void onClick(DrawablePosition target);
}
private DrawableClickListener drawableClickListener;
public void setDrawableClickListener(DrawableClickListener listener) {
this.drawableClickListener = listener;
}
}
```
2. 在TextView中添加drawable,并设置DrawableClickListener。
```java
Drawable drawable = ContextCompat.getDrawable(this, R.drawable.ic_launcher_background);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
textView.setCompoundDrawables(null, drawable, null, null);
DrawableClickListener drawableClickListener = new DrawableClickListener(DrawableClickListener.DrawablePosition.LEFT);
drawableClickListener.setDrawableClickListener(new DrawableClickListener.DrawableClickListener() {
@Override
public void onClick(DrawableClickListener.DrawablePosition target) {
Toast.makeText(MainActivity.this, "Drawable clicked", Toast.LENGTH_SHORT).show();
}
});
textView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
if (event.getRawX() >= (textView.getRight() - textView.getCompoundDrawables()[2].getBounds().width())) {
drawableClickListener.onClick(DrawableClickListener.DrawablePosition.RIGHT);
return true;
}
}
return false;
}
});
```
上述代码中,我们首先创建了一个Drawable,并将其设置为TextView中的左侧Drawable。然后我们创建了一个DrawableClickListener,并将其设置为TextView的OnTouchListener。在OnTouchListener中,我们检查触摸事件的位置是否在Drawable上,并在这种情况下触发DrawableClickListener的onClick事件。
这样,每当用户单击TextView中的Drawable时,将会触发DrawableClickListener的onClick事件。