问题:通常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