前言
在使用 ActionBar的时候,有时候会爆出空指针异常,这是由于应用没有获取到 ActionBar 导致的,而导致应用没有获取到 ActionBar 的原因比較多。所以我们以下就来总结一下 ActionBar 获取不到的错误原因。
解决的方法
- 检查你的应用是否设置了没有 ActionBar 的主题Theme。或者直接设置了 NoActionBar或NoTitleBar 属性,主要要检查这几点:检查 AndroidManifest.xml 中的 标签中的theme属性。然后检查各个 Activity 标签中是否有不同的 Theme 导致这个界面的 ActionBar 无法显示,
@android:style/Theme.NoTitleBar
和<item name="windowActionBar">false</item>
这种属性都会使应用中的 ActionBar消失,切记。假设你要使用ActionBar,则一定要清除掉这些Theme属性设置,假设你的项目中 res 文件夹下除了 values 文件夹外。还有其它的res/values-v11,style/values-v14等,则这些文件夹中的 styles.xml 都须要检查一下,最后再检查下 Activity 代码中是否动态设置了全屏或者不显示TitleBar,代码例如以下:<item name="android:windowNoTitle">true</item>
//requestWindowFeature(Window.FEATURE_NO_TITLE);
//getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
上面的两句代码。上面一句设置Activity不显示TitleBar, 下一句则设置Activity为全屏模式,这两句代码都会导致 ActionBar
无法显示,从而使 getActionBar()获取失败,假设你的项目中的 Activity 有父一级别的 Activity,则也须要将父一级别的Activity中的NoTitle和全屏代码凝视掉。.
- 假设你不确定你的应用所用的主题 Theme 是否支持 ActionBar,能够在 res/values.xml 文件里设置为Theme.AppCompat,这是 AppCompat 中的Theme主题。能够保证低版本号Android上也能够使用 ActionBar(注意:res/values,res/values-v11,res/values-v14等文件夹中的style都要进行style设置,而且都要注意:不要设置成第1条中会禁止ActionBar显示的主题,但能够设置为不同种类的主题),另外,在 Acticity 中获取 ActionBar 的时候(getActionBar()或getSupportBar()), 须要在 setContentView(R.layout.main)之后调用。
- 假设你的项目使用的是 android.app.ActionBar,则须要把你应用的最低支持版本号改为11(Android 3.0),使用 getActionBar() 来获取ActionBar,假设你的项目要支持Android 3.0以下,则你的项目须要引入最新的 AppCompat 兼容包,然后将 ActionBar引用改为 android.support.v7.app.ActionBar,并使用 getSupportActionBar 来获取 ActionBar;
- 除了以上的原因可能导致 ActionBar 获取为空的话,还有其它的原因导致 getActionBar() 获取失败,比如我在网上查找的时候。有人的项目是在Android SDK 2.2上新建的,当他使用 ActionBar 的时候将 AndroidManifest.xml 中的 minSdkVersion设置为11后(),发现 getActionBar() 获取失败是由于项目中没有 res/values-v11和res/values-v14和当中的style.xml文件。我近期遇到的 getActionBar() 为null是在 Eclipse 中导入了一个别人发给我的项目,可是在他的电脑上编译执行的apk getActionBar(), 但在我的电脑上则不行,试了上面的几种方法也不行,最后,我把这个项目导入到了 Android Studio 中,最终能够正常执行了。
假设大家有其它的有关 getActionBar() 为null的问题,方法和经验。欢迎讨论交流。
參考链接
http://vcsos.com/Article/pageSource/150125/20150125093506.shtml
http://www.apkbus.com/android-130755-1-1.html
http://www.cnblogs.com/shortboy/archive/2013/04/18/3029029.html
http://stackoverflow.com/questions/6867076/getactionbar-returns-null
http://blog.csdn.net/yueqinglkong/article/details/39577749
http://stackoverflow.com/questions/8499181/actionbar-throws-nullpointerexception
http://stackoverflow.com/questions/28255552/nullpointerexception-caused-by-getactionbar