1. 程式人生 > >【Android】getActionBar()為null的解決方法總結

【Android】getActionBar()為null的解決方法總結

andro 調用 種類 ref code trac page 沒有 stack

前言

在使用 ActionBar的時候,有時候會爆出空指針異常,這是由於應用沒有獲取到 ActionBar 導致的,而導致應用沒有獲取到 ActionBar 的原因比較多。所以我們以下就來總結一下 ActionBar 獲取不到的錯誤原因。

解決的方法

  1. 檢查你的應用是否設置了沒有 ActionBar 的主題Theme。或者直接設置了 NoActionBar或NoTitleBar 屬性,主要要檢查這幾點:檢查 AndroidManifest.xml 中的 標簽中的theme屬性。然後檢查各個 Activity 標簽中是否有不同的 Theme 導致這個界面的 ActionBar 無法顯示,@android:style/Theme.NoTitleBar
    <item name="windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
    這種屬性都會使應用中的 ActionBar消失,切記。假設你要使用ActionBar,則一定要清除掉這些Theme屬性設置,假設你的項目中 res 文件夾下除了 values 文件夾外。還有其它的res/values-v11,style/values-v14等,則這些文件夾中的 styles.xml 都須要檢查一下,最後再檢查下 Activity 代碼中是否動態設置了全屏或者不顯示TitleBar,代碼例如以下:
    //requestWindowFeature(Window.FEATURE_NO_TITLE);
    //getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    上面的兩句代碼。上面一句設置Activity不顯示TitleBar, 下一句則設置Activity為全屏模式,這兩句代碼都會導致 ActionBar
    無法顯示,從而使 getActionBar()獲取失敗,假設你的項目中的 Activity 有父一級別的 Activity,則也須要將父一級別的Activity中的NoTitle和全屏代碼凝視掉。.
  2. 假設你不確定你的應用所用的主題 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)之後調用。
  3. 假設你的項目使用的是 android.app.ActionBar,則須要把你應用的最低支持版本號改為11(Android 3.0),使用 getActionBar() 來獲取ActionBar,假設你的項目要支持Android 3.0以下,則你的項目須要引入最新的 AppCompat 兼容包,然後將 ActionBar引用改為 android.support.v7.app.ActionBar,並使用 getSupportActionBar 來獲取 ActionBar;
  4. 除了以上的原因可能導致 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://stackoverflow.com/questions/27959107/getting-the-null-pointer-exception-in-the-getactionbar-method/27960390
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

【Android】getActionBar()為null的解決方法總結