2015-09-24 4 views
0

У меня есть приложение, используя ниже основной темы в значениях/styles.xmlgetSupportActionBar() бросает NPE при использовании AppCompat-v7 22.2.1 или новее

<style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar"> 
    <item name="actionBarStyle">@style/MyActionBar</item> 
    <item name="actionBarTabStyle">@style/ActionBarTabStyle.Example</item> 
    <item name="actionBarTabTextStyle">@style/tabtextcolor</item> 
    <item name="colorPrimary">@color/primary_blue</item> 
    <item name="colorPrimaryDark">@color/primary_darker_blue</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="colorAccent">@color/primary_blue</item> 
</style> 

<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse"> 
    <item name="windowActionBar">true</item> 
    <item name="windowNoTitle">false</item> 
    <item name="background">@color/primary_blue</item> 
    <item name="backgroundStacked">@android:color/white</item> 
    <item name="backgroundSplit">@color/primary_blue</item> 
    <item name="icon">@android:color/transparent</item> 
    <item name="popupMenuStyle">@style/PopupMenu.Example</item> 
    <item name="android:titleTextStyle">@style/Widget.Carrental.TitleTextStyle</item> 
    <item name="titleTextStyle">@style/Widget.Carrental.TitleTextStyle</item> 
</style> 

<style name="Widget.Carrental.TitleTextStyle" parent="@android:style/Widget.TextView"> 
<item name="android:textSize">20sp</item> 
<item name="android:textColor">@android:color/white</item> 
<item name="android:alpha">1</item> 
</style> 

<style name="tabtextcolor" parent="@style/Widget.AppCompat.ActionBar.TabText"> 
<item name="android:textColor">@android:color/black</item> 
</style> 

<style name="ActionBarTabStyle.Example" parent="@style/Widget.AppCompat.ActionBar.TabView"> 
<item name="android:background">@drawable/tab_indicator_ab_example</item> 
</style> 

Все это прекрасно работает, когда я использую AppCompat-v7 22.2.1 на Киткате и леденец.

мне пришлось добавить зависимость компиляции, которая была ниже темы в значениях/style.xml

<style name="AppTheme.Transparent" parent="AppTheme.Transparent.Base" /> 

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
    <!-- Main theme colors --> 
    <!-- your app branding color for the app bar --> 
    <item name="colorPrimary">@color/primary</item> 
    <!-- darker variant for the status bar and contextual app bars --> 
    <item name="colorPrimaryDark">@color/primary_dark</item> 
    <!-- theme UI controls like checkboxes and text fields --> 
    <item name="colorAccent">@color/accent</item> 
</style> 

<style name="AppTheme.Transparent.Base" parent="AppTheme.Base"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowIsTranslucent">true</item> 
</style> 

И это в значениях-21/styles.xml

<style name="AppTheme" parent="AppTheme.Base"> 
    <item name="android:windowContentTransitions">true</item> 
    <item name="android:windowAllowEnterTransitionOverlap">true</item> 
    <item name="android:windowAllowReturnTransitionOverlap">true</item> 
    <item name="android:windowSharedElementEnterTransition">@android:transition/move</item> 
    <item name="android:windowSharedElementExitTransition">@android:transition/move</item> 
</style> 

<style name="AppTheme.Transparent" parent="AppTheme.Transparent.Base"> 
    <item name="android:statusBarColor">@android:color/transparent</item> 
</style> 

Теперь, когда Я пытаюсь запустить свое приложение, он не работает с NPE в коде

getSupportActionBar().hide(); 

Нынешний NPE;

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.app.ActionBar.hide()' on a null object reference 

Я убедился, что все классы деятельности расширяют AppCompatActivity, но у меня все еще есть тот же NPE. Итак, я прокомментировал следующие поля в теме библиотеки зависимостей.

<item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 

На этот раз мое приложение не преминул с NPE, но я вижу это сообщение в LogCat, когда управление переходит к коду в библиотеке зависимостей.

I/AppCompatDelegate: The Activity's LayoutInflater already has a Factory installed so we can not install AppCompat's 

ответ

0

я думаю, если и установить

<item name="windowActionBar">false</item> 

и нужно setSupportActionBar (uToolbar). если и could't использовать панель инструментов, и можно попробовать

<item name="windowActionBar">true</item> 
+0

я уже пытался добавить '<имя элемента = "windowActionBar"> истинный'. Я также прокомментировал два поля в библиотеке зависимостей, но это вызывает сообщение «AppCompatDelegate» – rbkool

Смежные вопросы