更改主题后,getSupportActionBar()返回null

时间:2016-02-21 14:47:29

标签: android android-actionbar

我用透明风格打开活动,这意味着它在开始时有这个主题:

<style name="Theme.Transparent" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

片刻之后我改变了主题

setTheme(R.style.AppThemeWithActionBar);

看起来像这样:

<style name="AppThemeWithActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowNoTitle">false</item>
    <item name="android:windowNoTitle">false</item>
    <item name="android:windowIsTranslucent">false</item>
    <item name="colorPrimary">@color/primaryDark</item>
    <item name="colorPrimaryDark">@color/primary</item>
    <item name="colorAccent">@color/accent</item>
</style>

但不幸的是,当我在更改主题后调用getSupportActionBar()时我得到null,是什么原因?

2 个答案:

答案 0 :(得分:1)

设置样式有两种方法:

使用AndroidManifest.xml 整个申请表:

<application android:theme="@style/CustomTheme" >
</application>

个人活动:

<application>
    <activity android:theme="@style/CustomTheme" >
    ...
    </activity>
</application>

以编程方式:

public void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.CustomTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
}

答案 1 :(得分:0)

如果不重新加载整个活动,就无法在运行时更改主题。因为我不想重新加载活动,所以我将不得不停止使用ActionBar并开始使用工具栏。