Android support-v7-appcompat 问题与 4.0 及更高版本

标签 android android-actionbar-compat android-appcompat

我正在向后移植我的 Android 应用程序以支持旧设备 (2.3.3+)。以前是 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 中完美运行,在我看来像是 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>

最佳答案

如果您使用的是 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);

关于Android support-v7-appcompat 问题与 4.0 及更高版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20028157/

相关文章:

android - 是否可以在应用程序本身中显示应用程序统计信息?

android - Android Studio Gradle不想同步

android - 在 ListView 中访问特定项目的布局

android - 将 ShowCaseView 与 ActionBarCompat/ActionBarSherlock Android 结合使用

android:windowNoTitle 不会隐藏带有 appcompat-v7 21.0.0 的操作栏

android - 如何更新 appcompat_v7?

android - 将数据从一个应用程序传递到另一个应用程序

android - 无法使用支持库获取 ActionBar MenuItem 的操作 View

java - Android:我在操作栏中设置了一些图标,但它们没有显示在我的设备上

android - gradle,无法展开 ZIP appcompat-v7 :19. 0.1