Android ActionBar选项长按事件

时间:2012-02-13 13:25:44

标签: android click android-actionbar long-click

Android任何人都可以知道有关Actionbar项目选项的长按,我想在长按操作栏菜单选项上显示文本,就像长按actionBar长按

上的提示一样

6 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:5)

user1206890,您不需要听长按活动。如果你想要显示动作提示,将在menu添加中设置足够的标题。检查2.3和4.0。

答案 2 :(得分:5)

对我来说,以下方法适用于较新的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
    }
});

重要说明:仅当项目出现在操作栏中时,此选项才有效。因此,如果选项出现在菜单下拉列表中,那么无论您想要在长时间点击中做什么都不会以这种方式访问​​。

答案 3 :(得分:4)

如果您通过android:actionLayout创建自己的操作视图,欢迎您在自己的小部件上设置侦听器以进行长按活动。您无权访问自己未创建的操作栏中的小部件。

答案 4 :(得分: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;
    }

答案 5 :(得分:0)

我认为&#34; findViewById&#34;是最容易找到的方法 只是做

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;
                    }
                }
        );