学习Android开发中遇到getActionBar()返回null,问题分析

问题:通常activity.getActionBar由于异常而返回null?

问题分析:

一、检查当前sdk的版本

看过Android的开发文档都知道,现在要启用ActionBar,那么应用运行的平台必须是Android3.0以上,也就是说sdk的版本号必须大于11,这个可以在build.gradle中看到。现在市面上的android已经是Android 9 ,Android 10,Android11,对于开发者这个sdk版本过低的问题应该不会遇到。

build.gradle如下:

 1. defaultConfig{
    
    
 2. *******
 3. minSdkVersion 29 //minSdjVersion 必须大于11.
 4. targetSdkVersion 30
 5. versionCode 1
 6. versionname "1.0"
 7. }

二、检查当前Activity是否引入xxxx.NoActionBar主题

首先查看是否是静态添加?
若是,则检查AndroidManifest.xml和主题文件中是否有android:them="xxxx.NoActionBar"的,例如:

//AndroidManifest.xml
 1. <application
 2. 	android:allowBackup="true"
 3. 	android:icon="@mipmap/ic_launcher"
 4. 	android:label="@string/app_name"
 5. 	android:roundIcon="@mipmap/ic_launcher_round"
 6. 	android:supportsRtl="true"
 7. 	android:theme="@style/Theme.Raolululearn"> //此处我设置了主题,无NoActionBar设置
 8. 	<activity android:name=".MainActivity">
 9. 		<intent-filter>
 10.			<action android:name="android.intent.action.MAIN" />
 11.			<category android:name="android.intent.category.LAUNCHER" /
 12.		</intent-filter>
 13.	</activity>
 14.</application>

//主题文件
<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.Raolululearn" parent="Theme.MaterialComponents.DayNight.DarkActionBar">//此处也无NoActionBar
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
        <!-- Customize your theme here. -->
    </style>
</resources>

若不是,则查看是否是在代码里有NoActionBar字样。

三、检查当前Activity继承的是AppCompatActivity,还是Activity。

若当前activity继承的是Activity,则在主题文件设置中不能用AppCompatTheme(Theme.AppCompat.*),可以用android:Theme.Darkxxx等设置主题。那么如下获取actionBar即可:

 1. ActionBar actionBar = getActivity().getActionBar(); 
 2. //此时actionBar就不会为null.

若当前activity继承的是AppCompatActivity,则在主题文件设置就需用AppCompatTheme(Theme.AppCompat.*),也可以用android:Theme.Darkxxx等设置主题。那么如下获取actionBar即可:

 1. ActionBar actionBar = ((AppCompatActivity)getActivity()).getSupportActionBar();
 2. //此时actionBar不会为null.

参考链接:

https://developer.android.com/reference/android/app/ActionBar
http://stackoverflow.com/questions/30681918/nullpointerexception-with-actionbar-setdisplayhomeasupenabledboolean-on-a-nu

猜你喜欢

转载自blog.csdn.net/raolulu/article/details/115175753