繁体   English   中英

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

[英]How to show menu icon in Actionbar?

我已将导航抽屉添加到我的主要活动中。 现在,我想在操作栏标题旁边有一个菜单图标。 所以我做了以下事情:

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

我也有:

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

我不能使用getActionBar().setHomeAsUpIndicator(R.drawable.ic_drawer); 因为我的最低API级别是16。

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

但是,使用上述代码,菜单图标不会显示在应用程序图标旁边。 而且,点击应用程序图标完全没有反应。

我需要添加什么代码才能显示菜单图标,并且活动对点击应用程序图标有反应?

编辑

为了使应用程序图标单击以工作,我在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);
        }
    }

但是,菜单图标仍未显示。

如下更改代码

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

用于选项菜单

@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