我里面有EditText
和图标
<EditText
android:id="@+id/myedittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableRight="@mipmap/microphone"/>
我为onClickListener
的Drawable
设置了EditText
myeditText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final int DRAWABLE_LEFT = 0;
final int DRAWABLE_TOP = 1;
final int DRAWABLE_RIGHT = 2;
final int DRAWABLE_BOTTOM = 3;
if(event.getAction() == MotionEvent.ACTION_UP) {
if(event.getRawX() >= (myeditText.getRight() - myeditText
.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
// your action here
Toast.makeText(getApplicationContext(),
"speak",Toast.LENGTH_SHORT).show();
return true;
}
}
return false;
}
});
当我点击EditText
Toast右边的图标显示我并且工作,但是也显示我在EditText
上粘贴选项。如何在右键单击图标时删除粘贴?
在我的情况下,从ACTION_UP
改为ACTION_DOWN
生效。当然,行为轻微改变了。并且光标仍会跳到文本的末尾。
你可以看看this问题,看看如何禁用粘贴。
但是我建议别的东西,而不是禁用粘贴,你可以用不同的方式做到这一点。看看whatsapp的麦克风按钮+ EditText
放置,我注意到它们是两个不同的元素,这就是你可能会做的。将你的EditText
包裹在水平的LinearLayout
中并在右端放置一个带麦克风的按钮。我希望你能设法使它发挥作用,并且你理解我的想法。
只需将android:longClickable =“false”设置为editbox即可。
好吧,已经有3年了。但是,对于像我这样可能面临这一挑战的人:解决方案是在ACTION_DOWN中返回true,但只在ACTION_DOWN上调用侦听器,同样返回true。在这种情况下,首先检查点击的区域是否与图标的区域相对应,然后再继续向上或向下检查操作:
@Override
public boolean onTouch(View v, MotionEvent event) {
final int DRAWABLE_LEFT = 0;
final int DRAWABLE_TOP = 1;
final int DRAWABLE_RIGHT = 2;
final int DRAWABLE_BOTTOM = 3;
if (event.getRawX() >= (myeditText.getRight() - myeditText
.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
if (event.getAction() == MotionEvent.ACTION_UP) {
// your action here
listener.onClick(v);
return true;
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
return true;
}
}
return false;
}