簡體   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