R.attr.colorPrimary的预期颜色类型

时间:2016-10-23 13:47:31

标签: android android-layout colors attr

我只想以编程方式设置contentScrim。所以我试过

int color = ContextCompat.getColor(getActivity(), R.attr.colorPrimary);
collapsingToolbarLayout.setContentScrimColor(color);

然后我试了

collapsingToolbarLayout.setContentScrimColor(
        getResources().getColor(R.attr.colorPrimary));

但我一直抱怨R.attr.colorPrimary。对此有何帮助?

似乎有人问过这个问题Android - Should pass resolved color instead of resource id here: `getResources().getColor(R.attr.colorPrimary)`。但我尝试的正是他们建议我应该尝试的。我的目标是minSDK 16。

BTW我不能使用R.color.colorPrimary,因为我希望动态设置的主题不是一些硬编码/默认颜色。

2 个答案:

答案 0 :(得分:1)

public int getColor(Context context, int colorResId) {

    //return ContextCompat.getColor(context, colorResId); // Doesn't seem to work for R.attr.colorPrimary

    TypedValue typedValue = new TypedValue();
    TypedArray typedArray = context.obtainStyledAttributes(typedValue.data, new int[] {colorResId});
    int color = typedArray.getColor(0, 0);
    typedArray.recycle();
    return color;

}

用法:

int actualPrimaryColor = getColor(context, R.attr.colorPrimary);

答案 1 :(得分:0)

试试这个:

TypedValue typedValue = new TypedValue();
context.getTheme().resolveAttribute(R.attr.colorPrimary, typedValue, true);
int color = typedValue.data;

collapsingToolbarLayout.setContentScrimColor(color);

我在collapsingToolbarLayout文档中找到的内容,setContentScrimColor获取颜色而不是资源ID