我知道我可以在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 lvl 11的模拟器上运行程序时会发生什么。我是否使用setStackedBackgroundDrawable
方法,似乎没有什么区别。
因此。我的问题是:你能告诉我我该怎么办才能让API lvl 11+设备的标签后面出现背景粉红色?
答案 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 +上的选项卡后面有背景颜色。