我想在我的Button
中有一个ActionBar
,当你触摸它时会做某事,而当你发布它时会有其他的事情。
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
- 它工作正常。
我错过了什么?
答案 0 :(得分:1)
ActionMenuPrestener
是一个内部类,用于控制ActionBar
中显示的菜单。如果MenuItem
有子菜单,则会附加View.OnTouchListener
,允许用户向前拖动手指以打开子菜单。如果MenuItem
没有子菜单,则会将View.OnTouchListener
设置为null
。
换句话说,您无法将View.OnTouchListener
附加到MenuItem
,因为框架会将其删除。您最好的选择是为View
创建自定义ActionBar
,然后附加View.OnTouchListener
。{/ p>
If you'd like to view the source for the ActionMenuPrestener
, you can do so here.
答案 1 :(得分:1)
有一种简单的方法:
@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;
}
});
}