4

Android 任何人都可以知道操作栏项目选项长按,我想在操作栏菜单选项上的 LongClick 上显示文本,例如长按操作栏长按的提示

4

6 回答 6

10

您想在操作栏上的菜单项上长按吗?至于我,在找到 2,3 小时后,我找到了这个解决方案。这对我来说非常有用。

      @Override
     public boolean onCreateOptionsMenu(final Menu menu) {



    getMenuInflater().inflate(R.menu.menu, menu);

    new Handler().post(new Runnable() {
        @Override
        public void run() {
            final View v = findViewById(R.id.action_settings);

            if (v != null) {
                v.setOnLongClickListener(new CustomLongOnClickListener());
            }
        }
    });

    return true;
}
于 2014-04-03T07:39:32.277 回答
6

对我来说,以下方法适用于较新的 Android 版本 - 我使用 Android 4.2 和 Android 5.0.1 对其进行了测试。

这个想法是我用自定义视图替换操作图标视图。在这里,我必须处理单击,而我可以处理长单击。

如果我希望外观与普通操作栏图标完全相同,则可以使用以下方法。

首先,创建一个仅包含带有图标的 ImageButton 的布局。

<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myButton"
    style="?android:attr/actionButtonStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:contentDescription="@layout/text_view_initializing"
    android:src="@drawable/ic_action_plus" />

然后将此 ImageButton 放入操作栏中并将侦听器附加到它。

MenuItem myItem = menu.findItem(R.id.my_action);
myItem.setActionView(R.layout.my_image_button);
myItem.getActionView().setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(final View v) {
        // here, I have to put the stuff that normally goes in onOptionItemSelected 
    }
});
myItem.getActionView().setOnLongClickListener(new OnLongClickListener() {
    @Override
    public boolean onLongClick(final View v) {
        // here, I put the long click stuff
    }
});

重要说明:这仅在项目出现在操作栏中时才有效。因此,如果该选项出现在菜单下拉菜单中,那么您将无法通过这种方式访问​​您想要在长按上执行的操作。

于 2015-08-10T14:03:31.987 回答
5

user1206890,不需要监听长按事件。如果你想显示动作提示,在菜单添加中设置标题就足够了。检查 2.3 和 4.0。

于 2012-08-12T01:16:22.540 回答
4

If you create your own action view via android:actionLayout, you are welcome to set up listeners on your own widgets for long-click events. You do not have access to widgets in the action bar that you do not create yourself.

于 2012-02-13T13:37:32.953 回答
1

我认为“findViewById”是最简单的查找方法。
做就是了

View action_example = findViewById(R.id.action_example);
        if(action_example!=null)action_example.setOnLongClickListener(
                new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        Toast.makeText(MainActivity.this, "action_example", Toast.LENGTH_SHORT).show();
                        return true;
                    }
                }
        );
于 2016-04-08T03:45:26.347 回答
1

由于@YeeKhin 将“main”更改为您的菜单名称,将“action_refresh”更改为您的操作名称,将“Activity”更改为您的活动名称,这是适用于我的函数代码

public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main, menu);

        new Handler().post(new Runnable() {
            @Override
            public void run() {
                final View v = findViewById(R.id.action_refresh);

                if (v != null) {
                    v.setOnLongClickListener(new View.OnLongClickListener() {
                        @Override
                        public boolean onLongClick(View v) {
                            Toast.makeText(Activity.this,"Long Press!!",Toast.LENGTH_LONG).show();
                            return false;
                        }
                    });
                }
            }
        });

        return true;
    }
于 2020-01-29T11:34:34.070 回答