学习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

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何愁无路QAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值