以编程方式设置文本颜色为辅助颜色。

3
我该如何在程序中将文本颜色设置为“textColorSecondary”?我尝试了下面的代码,但它并不起作用。有人知道代码有什么问题吗?
TextView tv1 = ((TextView)v.findViewById(R.id.hello_world));
tv1.setTextColor(Color.textColorSecondary);

2
在提问之前必须先搜索。 - Pankaj
1
是的,MacaronLover,我只是建议在提问之前先搜索SO,以免重复提出已经被问过的问题。 - Pankaj
我已经搜索过了,没有找到重复的问题,所以才问的。不管怎样,你知道它出了什么问题吗? - wbk727
5个回答

13

编辑:

要从属性中获取颜色,请使用以下方法:

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

使用后,我收到了错误信息“无法解析符号'textColorSecondary'”。 - wbk727
不,我认为textColorSecondary是一个属性? - wbk727
11
使用 android.R.attr.textColorSecondary。 - Narox

5
我最有效的实现方式是这种方法:
int textColor = getTextColor(context, android.R.attr.textColorSecondary);

public int getTextColor(Context context, int attrId) {
    TypedArray typedArray = context.getTheme().obtainStyledAttributes(new int[] { attrId });
    int textColor = typedArray.getColor(0, 0);
    typedArray.recycle();
    return textColor;
}

其他解决方案返回的颜色ID是错误的。

2
Material Design库提供了一个实用类
@ColorInt val secondaryColor = MaterialColors.getColor(context, android.R.attr.textColorSecondary, Color.BLACK)

0

感谢Anton Kovalyov,我从答案中为Kotlin开发人员制作了一些扩展函数。

fun Context.getAttrColor(@AttrRes attr: Int): Int {
    val typedValue = TypedValue()
    theme.resolveAttribute(attr, typedValue, true)
    return typedValue.data
}

您可以在任何有上下文的地方使用此函数。

-4

首先在你的colors.xml文件中添加textColorSecondary

<color name="textColorSecondary">PutColorCodeHere</color>

然后在代码中设置颜色:

tv1.setTextColor(getResource.getColor(R.color.textColorSecondary));

非常感谢。你知道我的另一个问题出了什么问题吗?链接在这里:link to other problem - wbk727
让我看一下链接,然后告诉你。 - Pankaj
在我的先前的评论中,链接指向“链接到其他问题”。 - wbk727
1
我不会这样做。你最终会得到两个名称相同的资源:app.R.color.textColorSecondaryandroid.R.attr.textColorSecondary。最好使用下面的答案中给出的 TypeValue。 - d_r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接