【问题标题】:ActionBar throws NullPointerException after implementing splash screen via themeActionBar 通过主题实现闪屏后抛出 NullPointerException
【发布时间】:2014-01-20 19:54:34
【问题描述】:

我正在尝试向我的应用添加启动画面,以便在加载所有内容时显示。我跟着this post 通过一个主题来做到这一点。它看起来按照我想要的方式工作,但在显示启动画面后不久,应用程序在尝试自定义 ActionBar 时崩溃。

主题.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme.SplashScreen" parent="@style/Theme.AppCompat">        
        <item name="android:windowBackground">@drawable/orange_background</item>
        <item name="android:windowNoTitle">true</item>
    </style>
</resources>

AndroidManifest.xml 的相关部分

<application
    android:allowBackup="true"
    android:theme="@style/CustomActionBarTheme" 
    android:label="@string/app_name"
    android:icon="@drawable/ic_launcher"
    android:largeHeap="true" >
    <activity
        android:name="com.example.app.MainActivity"
        android:label="@string/app_name"
        android:theme="@style/Theme.SplashScreen"
        android:screenOrientation="portrait" >

MainActivity.java 中的部分导致崩溃

final ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);

原因:android.support.v7.app.ActionBarImplICS.setDisplayHomeAsUpEnabled(ActionBarImplICS.java:174) 的 java.lang.NullPointerException 在 android.support.v7.app.ActionBarImplJB.setDisplayHomeAsUpEnabled(ActionBarImplJB.java: 20)

注意:此崩溃仅在我实现启动画面后才开始发生。

【问题讨论】:

    标签: java android nullpointerexception android-actionbar


    【解决方案1】:

    我猜这是与windowNoTitlesetDisplayHomeAsUpEnable 的冲突。 对于初始屏幕,您禁用 Title(和完整的 ActionBar),并在 MainActivity.java 中尝试在禁用的 ActionBar 中设置一个向上按钮。

    您可能想要使用来自this post 的代码。

    【讨论】:

    • 这看起来与this question 非常相似,所以这可能确实是原因。
    【解决方案2】:

    为什么需要在启动画面中显示操作栏?

    一旦定义:

     <item name="android:windowNoTitle">true</item>
    

    getActionBar 总是返回 null

    【讨论】:

    • 明白了。有没有办法在显示启动画面时隐藏操作栏?
    • 移除 android:windowNoTitle 并在活动中调用 getActionBar().hide()
    【解决方案3】:

    添加"android:windowNoTitle" 表示不创建操作栏。因此getSupportActionBar() 将返回null

    【讨论】:

    • 嗯,好的。我只是从模板中保留了它,而不是作为一名 Android 开发人员,这并没有立即让我感到震惊。但是,摆脱该行会在启动屏幕上显示我不想要的标题栏。
    • @Kevin_TA - 如果您不想显示操作栏,为什么要首先调用getSupportActionBar()?似乎如果您不希望它显示,那么如果在不可见的栏上启用主页按钮也没关系......
    • 我需要在我的主要活动中显示在初始屏幕之后的操作栏。我只需要隐藏启动屏幕的操作栏,然后在应用程序的其余部分显示它。
    • 这就是启动画面(通常被认为是bad idea)作为单独的活动实现的原因之一——因此您可以将它们的主题与应用程序的其余部分分开。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多