菜单项上的OnLongClickListener

时间:2015-06-08 08:01:06

标签: android android-menu

我想在工具栏菜单上为项目的长按动作设置一个监听器。 我创建了项目

    <item
    android:id="@+id/action_center"
    android:title="center"
    android:icon="@mipmap/ic_center_direction_100"
    app:actionViewClass="android.widget.ImageView"
    app:showAsAction="always" />

我以这种方式得到它

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.menu_map, menu);

    /* Set onclick listener on center icon to center at user position */
    MenuItem centering = menu.findItem(R.id.action_center);

    ImageView button = (ImageView) centering.getActionView();
    if (button == null)
        return true;

    button.setOnLongClickListener(
            new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    centerUserPosition();
                    return true;
                }
            }
    );

    return true;
}

但它不起作用。什么是正确的方法?

1 个答案:

答案 0 :(得分:0)

您可以将自己的自定义按钮设置为工具栏。然后只需将onLongClickListener设置为此按钮。

<android.support.v7.widget.Toolbar
    android:id="@+id/mytoolbar"
    android:layout_height="55dp"
    android:layout_width="match_parent"
    android:minHeight="55dp"
    android:background="?attr/colorPrimary"
    android:elevation="5dp">

<Button
    android:id="@+id/toolbar_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end"/>

</android.support.v7.widget.Toolbar>

按钮应为32dp x 32dp,实际图标为24dp x 24dp。

//In your onCreate method
Toolbar toolbar = (Toolbar) findViewById(R.id.mytoolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);

Button button = (Button)findViewById(R.id.toolbar_button);
button.setOnLongClickListener(
        new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                centerUserPosition();
                return true;
            }
        }
);