6

古いデバイス (2.3.3 以降) をサポートするために、Android アプリケーションをバックポートしています。以前は 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>
4

1 に答える 1

0

AppCompat v7 を使用している場合は、ActionBar の代わりに SupportActionBar を呼び出す必要があります

 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);
于 2014-06-24T08:03:52.657 に答える