我向后移植我的Android应用程序以支持旧设备(2.3.3+)。以前,它是4.0 +。
我正在使用ActionBar并在基类的代码中对其进行自定义样式。转换为支持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&它看起来像是support-v7-appcompat中的一个问题。
克服或解决的任何线索/帮助?提前谢谢。
修改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 :(得分: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);