【问题标题】:Default Action Bar displays action menu items only on the main activity默认操作栏仅在主要活动上显示操作菜单项
【发布时间】:2016-05-17 06:41:45
【问题描述】:

我的应用中有两个活动。我想在默认操作栏上设置两个菜单项。他们在主要活动上正确设置,但在其他活动中,操作栏没有显示它们。我仍然看到带有标签的操作栏,但没有操作菜单。

这是清单文件:

    <activity
        android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>


    <activity
        android:name=".SecondActivity">
    </activity>

</application>

菜单项:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
    android:id="@+id/Settings"
    android:icon="@drawable/ic_settings_white_48dp"
    android:onClick="onClickDoAction"
    app:showAsAction="ifRoom|withText"
    android:title="Settings">
</item>

<item
    android:id="@+id/Share"
    android:icon="@drawable/ic_share_white_48dp"
    android:onClick="onClickDoAction"
    app:showAsAction="ifRoom|withText"
    android:title="Share">
</item>

风格:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowBackground">@color/background</item>
</style>

还有 MainActivity:

public class MainActivity extends AppCompatActivity {
    ...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu, menu);
    return true;
}

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

}

我提到在 SecondActivity 中我在这方面没有做任何事情,我是否应该在每个活动中也调用 onCreateOptionsMenu() 等等?...

【问题讨论】:

    标签: android android-actionbar


    【解决方案1】:
    getMenuInflater().inflate(R.menu.menu, menu);
    

    此行将MenuItems 添加到当前Activity。您必须为每个Activity 执行此操作。


    如果您在每个Activity 中都有相同的菜单,您可以在超类中调用它并让所有活动扩展它。这将有助于减少重复代码。

    【讨论】:

    • 我进行了很多搜索,但我没有明确地发现我应该在每个活动中调用它,所以我想也许在 Manifest 文件中我没有正确执行的设置会将其传播到应用程序中的所有活动。看来我错了...非常感谢!
    猜你喜欢
    • 2015-12-21
    • 2014-06-29
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多