如何使用android.support.v7.app.ActionBar以编程方式更改API v11 +上堆积条的背景颜色?

时间:2014-03-04 12:31:43

标签: android-3.0-honeycomb android-tabs android-actionbar-compat

我知道我可以在xml中执行此操作,但我想以编程方式执行此操作。

我正在使用 bar.setBackgroundDrawable(new ColorDrawable(0x20000000 + currentlySelectedLine.color));bar.setStackedBackgroundDrawable(new ColorDrawable(0x20000000 + currentlySelectedLine.color)); 更改actionBar的背景颜色。

在值中,values-v11和values-v14我有相同的样式 - 指向Theme.AppCompat.Light的父级,没有任何内容。

在下图中,您可以看到当我在API lvl 10的模拟器上运行程序时会发生什么。我是否使用setStackedBackgroundDrawable方法,似乎没有什么区别。

api v10-

在下图中,您可以看到当我在API lvl 11的模拟器上运行程序时会发生什么。我是否使用setStackedBackgroundDrawable方法,似乎没有什么区别。

api v11+

因此。我的问题是:你能告诉我我该怎么办才能让API lvl 11+设备的标签后面出现背景粉红色?

1 个答案:

答案 0 :(得分:1)

查看android.support.v7的源代码,我发现android.support.v7.app.ActionBar.setStackedBackgroundDrawable()几乎没有任何内容。

由于我一直在使用android.support.v7.app.ActionBarActivity,并且在Honeycomb上进行了大部分测试,我认为我无法使用android.app.Activity.getActionBar(),因为该方法将返回null。 / p>

但4.1.2中的情况并非如此。在4.1.2中,使用该方法,我得到android.app.ActionBar。

关注this webpage我意识到有大约0.1%的Android用户使用API​​ lvl 11-13。

所以,我修改了我的代码:

  // activity is an instance of ActionBarActivity.
  // ActionBar = android.support.v7.app.ActionBar.
  ActionBar bar = activity.getSupportActionBar();
  bar.setBackgroundDrawable(new ColorDrawable(0x20000000 +
      currentlySelectedLine.color));
    if (android.os.Build.VERSION.SDK_INT > 13)
      setBackgroundColorV14(activity);

  // ...

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
private void setBackgroundColorV14(final ActionBarActivity activity) {
  android.app.ActionBar bar = activity.getActionBar();
  bar.setStackedBackgroundDrawable(new ColorDrawable(0x20000000 +
      currentlySelectedLine.color));
}

基本上,结果是我在API v7-10和API v14 +上的选项卡后面有背景颜色。