是否可以长按菜单项以执行某项操作? 当我长按某个项目时,我试图让菜单下拉。
这里是菜单xml
<item
android:id="@+id/add_item"
android:icon="@drawable/ic_add_black_24dp"
android:showAsAction="ifRoom"
android:title="Add Item">
</item>
<item
android:id="@+id/open_menu"
android:icon="@drawable/ic_menu_black_24dp"
android:showAsAction="ifRoom|withText"
android:title="Open Menu">
</item>
我希望在长按第一项时显示下拉列表
答案 0 :(得分:3)
您可以使用Handler
和Runnable
执行此操作。在run()
方法内,获取所需View
的{{1}}并将MenuItem
听众设为onLongClick
。
以下是工作代码:
View
<强>输出:强>
答案 1 :(得分:1)
使用Kotlin轻松(并保持与其他图标相同的样式):
fun MenuItem.onMenuItemLongClickListener(menu: Menu, function: () -> (Unit)) {
setActionView(R.layout.view_action_button)
actionView.find<ImageButton>(R.id.item).setImageDrawable(icon)
actionView.setOnLongClickListener {
function()
true }
actionView.setOnClickListener { menu.performIdentifierAction(itemId, 0) }
}
view_action_button.xml
:
<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item"
style="?android:attr/actionButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
用法:
menu.findItem(R.id.your_item).onMenuItemLongClickListener(menu) { anyFunction() }
只需更改R.id.your_item
和anyFunction()
答案 2 :(得分:0)
以下是您问题的另一种解决方案。 我在res / menu / menu.xml中使用了如下菜单:
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_send"
android:orderInCategory="100"
android:title="@string/send_menu"
app:showAsAction="always" />
</menu>
这是我的活动课程。我在菜单项中添加了一个图像按钮,并为其设置了图像资源。 Backgroud设置为null以具有透明的menuItem。
public class MyActivity extends AppCompatActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
MenuItem item = menu.findItem(R.id.action_send);
ImageButton imageButton = new ImageButton(this);
imageButton.setImageResource(R.drawable.ic_send_white_24dp);
imageButton.setBackground(null);
item.setActionView(imageButton);
item.getActionView().setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Log.d("Send Button", "Long pressed");
Toast.makeText(MainActivity.this, "Send button long pressed", Toast.LENGTH_LONG).show();
onSendMenuItemLongClick();
return true;
}
});
item.getActionView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onSendMenuItemClick(item);
}
});
return super.onCreateOptionsMenu(menu);
}
private void onSendMenuItemLongClick() {
}
private void onSendMenuItemClick(MenuItem item) {
Toast.makeText(this, "Send button clicked", Toast.LENGTH_LONG).show();
}
}