简体   繁体   English

如何在操作栏中显示菜单图标?

[英]How to show menu icon in Actionbar?

I've added a navigation drawer to my main activity. 我已将导航抽屉添加到我的主要活动中。 Now I would like to have a menu icon next to action bar title. 现在,我想在操作栏标题旁边有一个菜单图标。 So I did the following: 所以我做了以下事情:

    mDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close)
    {
        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            invalidateOptionsMenu();
        }

        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            invalidateOptionsMenu();
        }
    };
    mDrawerToggle.setDrawerIndicatorEnabled(false);
    mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_drawer);
    mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (dlDrawer.isDrawerVisible(GravityCompat.START)) {
                dlDrawer.closeDrawer(GravityCompat.START);
            } else {
                dlDrawer.openDrawer(GravityCompat.START);
            }
        }
    });
    mDrawerToggle.syncState();

I also have: 我也有:

    getActionBar().setDisplayShowHomeEnabled(true);
    getActionBar().setHomeButtonEnabled(true);

I cannot use getActionBar().setHomeAsUpIndicator(R.drawable.ic_drawer); 我不能使用getActionBar().setHomeAsUpIndicator(R.drawable.ic_drawer); because my min API level is 16. 因为我的最低API级别是16。

This is the xml for the menu: 这是菜单的xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" tools:context="com.app.activities.MainActivity">
    <item android:id="@+id/action_settings"
        android:title="@string/action_settings"
        android:orderInCategory="200" app:showAsAction="never" />
</menu>

However, with the above code, the menu icon is not being displayed next to the app icon. 但是,使用上述代码,菜单图标不会显示在应用程序图标旁边。 And tapping on the app icon has no reaction at all. 而且,点击应用程序图标完全没有反应。

What code do I need to add to have the menu icon show and the activity react to the tapping of the app icon? 我需要添加什么代码才能显示菜单图标,并且活动对点击应用程序图标有反应?

EDIT 编辑

To get the app icon clicking to work I added the following code in onOptionsItemSelected : 为了使应用程序图标单击以工作,我在onOptionsItemSelected添加了以下代码:

    int id = item.getItemId();

    if (id == android.R.id.home) {
        if (dlDrawer.isDrawerVisible(GravityCompat.START)) {
            dlDrawer.closeDrawer(GravityCompat.START);
        } else {
            dlDrawer.openDrawer(GravityCompat.START);
        }
    }

However, the menu icon is still not being displayed. 但是,菜单图标仍未显示。

change your code as follow 如下更改代码

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.ic_drawer, //nav menu toggle icon
                R.string.app_name, // nav drawer open - description for accessibility
                R.string.app_name // nav drawer close - description for accessibility
        ){
            public void onDrawerClosed(View view) {
                getActionBar().setTitle(mTitle);
                // calling onPrepareOptionsMenu() to show action bar icons
                invalidateOptionsMenu();
            }

            public void onDrawerOpened(View drawerView) {
                getActionBar().setTitle(mDrawerTitle);
                // calling onPrepareOptionsMenu() to hide action bar icons
                invalidateOptionsMenu();
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);

for option menu 用于选项菜单

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // toggle nav drawer on selecting action bar app icon/title
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        // Handle action bar actions click
        switch (item.getItemId()) {
        case R.id.action_settings:
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

    /***
     * Called when invalidateOptionsMenu() is triggered
     */
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // if nav drawer is opened, hide the action items
        boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
        menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
        return super.onPrepareOptionsMenu(menu);
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM