2013-11-17 3 views
6

Я поддерживаю приложение Android для поддержки старых устройств (2.3.3+). Раньше это было 4.0+.Проблема с поддержкой Android-v7-appcompat с 4.0 и выше

Я использую ActionBar и выполняю индивидуальный стиль на нем в коде базового класса. После преобразования в Support ActionBar код стиля:

public static void styleActionBar(final ActionBarActivity activity) { 
    /* Setup the actionbar as required */ 
    final ActionBar actionBar = activity.getSupportActionBar(); 

    if (actionBar != null) { 
     actionBar.setBackgroundDrawable(new ColorDrawable(0xfffffff)); 
     actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
     actionBar.setCustomView(R.layout.customview_actionbar); 

     .... 
    } 
} 

После этого изменения все работает отлично на 2.3.3. Но, 4.0+, он выходит из строя на линии

 actionBar.setBackgroundDrawable(new ColorDrawable(0xfffffff)); 

Кроме того, если я закомментировать эту строку, я могу видеть, что он выходит из строя в actionBar.setCustomView также.

Стек след на 4.2:

.... 
Caused by: java.lang.NullPointerException 
    at android.support.v7.app.ActionBarImplICS.setBackgroundDrawable(ActionBarImplICS.java:176) 
    at com.mycompany.myproj.ProjBaseActivity.styleActionBar(ProjBaseActivity.java:68) 
    at com.mycompany.myproj.ProjBaseActivity.onCreate(ProjBaseActivity.java:32) 
    at com.mycompany.myproj.TextSearchActivity.onCreate(TextSearchActivity.java:60) 
    at android.app.Activity.performCreate(Activity.java:5008) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2139) 

Он отлично работает в 2.3.3 & он смотрит на меня, как вопрос в опорно-v7-AppCompat.

Любые подсказки/помощь по преодолению или работе? Заранее спасибо.

Edit 1: values-v14/styles.xml содержание:

<resources> 

    <style name="MyTheme" parent="@style/Theme.AppCompat.Light"> 
    <item name="android:actionBarStyle">@style/MyTheme.ActionBarStyle</item> 
    </style> 

    <style name="MyTheme.ActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar"> 
    <item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item> 
    </style> 

    <style name="MyTheme.ActionBar.TitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"> 
    <item name="android:textColor">@color/proj_theme_color</item> 
    </style> 

</resources> 
+0

Когда именно вы называете этот метод? – Luksprog

+0

в 'onCreate()' активности сразу после 'super.onCreate()' – Shameem

+0

Извините, о предыдущем вопросе, это было очевидно из stacktrace. У вас разные темы для уровня API ('values-v14' и т. Д.)? Некоторые темы не имеют «ActionBar» (например, темы, основанные на диалоге). – Luksprog

ответ

0

Если вы используете AppCompat v7 вам нужно вызвать SupportActionBar вместо ActionBar

final **SupportActionBar** actionBar = activity.getSupportActionBar(); 

if (actionBar != null) { 
    actionBar.setBackgroundDrawable(new ColorDrawable(0xfffffff)); 
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
    actionBar.setCustomView(R.layout.customview_actionbar); 
Смежные вопросы