Android 操作栏按钮赢得';不要对触摸事件做出反应
我希望在我的Android 操作栏按钮赢得';不要对触摸事件做出反应,android,events,android-actionbar,touch,Android,Events,Android Actionbar,Touch,我希望在我的操作栏中有一个按钮,当你触摸它时,它会做一些事情,当你松开它时,它会做一些其他事情 private Button mButton; @Override public boolean onPrepareOptionsMenu(Menu menu) { mButton = (Button) getLayoutInflater().inflate(R.layout.action_button, null); mButton.setOnTouchListener(new
操作栏中有一个按钮
,当你触摸它时,它会做一些事情,当你松开它时,它会做一些其他事情
private Button mButton;
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
mButton = (Button) getLayoutInflater().inflate(R.layout.action_button, null);
mButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent e) {
Log.d(TAG, "This line never executes...");
return false;
}
}
menu.getItem(0).setActionView(mButton);
return super.onPrepareOptionsMenu(menu);
}
如上所述,当我按下按钮时,onTouch中不会发生任何事情。我在同一菜单中有另一个按钮(我通过getItem(1)
)设置按钮的正常工作方式-通过onClickListener
-它工作正常
我缺少什么?ActionMenuPrestener
是一个内部类,用于控制出现在操作栏中的菜单。如果MenuItem
有子菜单,它将附加一个视图.OnTouchListener
,允许用户向前拖动手指以打开子菜单。如果MenuItem
没有子菜单,则将视图.OnTouchListener
设置为null
换句话说,您不能将视图.OnTouchListener
附加到菜单项
,因为框架将删除它。您最好为您的操作栏
创建一个自定义视图
,然后附加一个视图
有一种简单的方法:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem yourItem = menu.add("Your_item");
yourItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
View yourItemView = new ImageView(this);
yourItemView.setBackground(ContextCompat.getDrawable(this, R.drawable.your_icon_drawable));
yourItem.setActionView(yourItemView);
yourItemView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()){
case MotionEvent.ACTION_DOWN:
Log.d(TAG, "ACTION_DOWN");
// do your touch stuff here
break;
case MotionEvent.ACTION_UP:
Log.d(TAG, "ACTION_UP");
// do your release stuff here
break;
}
return true;
}
});
}
我很抱歉没有回答这个问题。我最终选择了另一种方式来使用这个功能的UI,但是你的回答确实解释了为什么这个功能不起作用,以及我必须做些什么才能使它起作用,所以我接受它。