Android 菜单动态变化添加或去除

Posted 好久不见

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 菜单动态变化添加或去除相关的知识,希望对你有一定的参考价值。

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:id="@+id/menu_items">
        <item android:id="@+id/menu_item_night_mode"
            android:title="@string/menu_item_night_mode"
            android:icon="@android:drawable/ic_menu_preferences"/>
        <item android:id="@+id/menu_item_settings"
            android:title="@string/menu_item_settings"
            android:icon="@android:drawable/ic_menu_preferences"/>
        <item android:id="@+id/menu_item_help"
            android:title="@string/menu_item_help"
            android:icon="@android:drawable/ic_menu_preferences"/>
    </group>
</menu>
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // We only want to show it as a menu in landscape, and only for clock/alarm fragment.
        mMenu = menu;
        //方向水平
        if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
            if (mActionBar.getSelectedNavigationIndex() == ALARM_TAB_INDEX ||
                    mActionBar.getSelectedNavigationIndex() == CLOCK_TAB_INDEX) {
                // Clear the menu so that it doesn‘t get duplicate items in case onCreateOptionsMenu
                // was called multiple times.
                menu.clear();
                getMenuInflater().inflate(R.menu.desk_clock_menu, menu);


                MenuItem nightMode = menu.findItem(R.id.menu_item_night_mode);
                MenuItem help = menu.findItem(R.id.menu_item_help);
                if (mActionBar.getSelectedNavigationIndex() == ALARM_TAB_INDEX) {
                    nightMode.setVisible(false);
                    help.setVisible(false);
                } else if (mActionBar.getSelectedNavigationIndex() == CLOCK_TAB_INDEX) {
                    nightMode.setVisible(true);
                    help.setVisible(false);
                }

            }
            // Always return true for landscape, regardless of whether we‘ve inflated the menu, so
            // that when we switch tabs this method will get called and we can inflate the menu.
            return true;
        }
        return false;
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        updateMenu(menu);
        return true;
    }

    private void updateMenu(Menu menu) {
        // Hide "help" if we don‘t have a URI for it.
        MenuItem help = menu.findItem(R.id.menu_item_help);
        if (help != null) {
            Utils.prepareHelpMenuItem(this, help);
        }

        // Hide "lights out" for timer.
        MenuItem nightMode = menu.findItem(R.id.menu_item_night_mode);
        if (mActionBar.getSelectedNavigationIndex() == ALARM_TAB_INDEX) {
            nightMode.setVisible(false);
        } else if (mActionBar.getSelectedNavigationIndex() == CLOCK_TAB_INDEX) {
            nightMode.setVisible(true);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (processMenuClick(item)) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    private boolean processMenuClick(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_item_settings:
                startActivity(new Intent(DeskClock.this, SettingsActivity.class));
                return true;
            case R.id.menu_item_help:
                Intent i = item.getIntent();
                if (i != null) {
                    try {
                        startActivity(i);
                    } catch (ActivityNotFoundException e) {
                        // No activity found to match the intent - ignore
                    }
                }
                return true;
            case R.id.menu_item_night_mode:
                startActivity(new Intent(DeskClock.this, ScreensaverActivity.class));
            default:
                break;
        }
        return true;
    }

 

以上是关于Android 菜单动态变化添加或去除的主要内容,如果未能解决你的问题,请参考以下文章

Android - 导航抽屉 - 与动态菜单项重叠的片段

导航菜单和在android中的选择性片段上添加按钮

添加片段时的 FlyOut 菜单设计问题

如何在 Android 中将选项菜单添加到 Fragment

Android片段布局完成膨胀

在片段中动态添加文本视图