Android操作栏选项菜单显示问题

时间:2017-05-22 08:28:39

标签: java android android-optionsmenu

好的,所以我遇到了一个小问题,我真的不知道如何解决这个问题。

所以我有一个应用程序,我将自己的风格用于Action Bar

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="windowActionModeOverlay">true</item>
        <item name="actionBarStyle">@style/AppTheme.ActionBar</item>
        <item name="android:textColorSecondary">@color/action_bar_bg</item>
    </style>

    <style name="AppTheme.ActionBar" parent="Widget.AppCompat.ActionBar">
        <item name="height">30dp</item>
        <item name="background">@color/action_bar_bg</item>
    </style>
</resources>

显示的菜单

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" >

    <item android:id="@+id/sortByStatus"
        android:title="@string/sort_by_status"
        app:showAsAction="never" />

    <item android:id="@+id/sortByName"
        android:title="@string/sort_by_name"
        app:showAsAction="never" />

    <item android:id="@+id/sortByCompany"
        android:title="@string/sort_by_company"
        app:showAsAction="never" />
</menu>

这几乎适用于所有地方,除非我尝试显示我的选项菜单。我已经为它添加了选项菜单和处理程序,但是当我点击选项菜单时,默认的顶部图标(来自通知栏)也显示在我的选项菜单中,我不希望那些显示在那里。它还开始显示索尼手机的默认底部导航按钮。

example of the problem1 example of the problem2

从onResume

启用菜单
@Override
public void onResume() {
    super.onResume();

    AppCompatActivity appCompatActivity = (AppCompatActivity) getActivity();
    if (appCompatActivity != null && appCompatActivity.getSupportActionBar() != null)
        appCompatActivity.getSupportActionBar().setTitle(getResources().getString(R.string.presense_status));

    setHasOptionsMenu(true);
    ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

然后是菜单onCreate

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_presense_status, menu);
}

然后是所选项目的处理程序

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            getActivity().getFragmentManager().popBackStackImmediate();
            break;

        case R.id.sortByStatus:
            if (null != mDataSource) {
                // update data list
                reloadData();
            }
            break;

        case R.id.sortByName:
            if (null != mDataSource) {
                // update data list
                reloadData();
            }
            break;

        case R.id.sortByCompany:
            if (null != mDataSource) {
                // update data list
                reloadData();
            }
            break;

        default:
            super.onOptionsItemSelected(item);
    }

    return true;
}

我真的无法看到问题的来源或如何将其删除,以免发生这种情况。这发生在由我的主Activity启动的Fragment中,这意味着我只有一个Activity为不同的应用内任务生成不同的片段。 任何帮助或想法将不胜感激。

1 个答案:

答案 0 :(得分:1)

我仍然不知道为什么通知栏会受到我所做的影响,但在此视图中强制应用程序全屏停止了问题,所以我想这是一个可以接受的解决方法。

bytes(...)