长按Android菜单项?

时间:2017-06-05 14:10:23

标签: android

是否可以长按菜单项以执行某项操作? 当我长按某个项目时,我试图让菜单下拉。

这里是菜单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>

我希望在长按第一项时显示下拉列表

3 个答案:

答案 0 :(得分:3)

您可以使用HandlerRunnable执行此操作。在run()方法内,获取所需View的{​​{1}}并将MenuItem听众设为onLongClick

以下是工作代码:

View

<强>输出:

enter image description here

答案 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_itemanyFunction()

答案 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();
    }
}