在XML中,我们可以通过textColor属性设置文本颜色,比如android:textColor="#FF0000"。但是我如何通过编码来改变它呢?
我试过这样的方法:
holder.text.setTextColor(R.color.Red);
其中holder只是一个类,文本类型为TextView。红色是字符串中设置的RGB值(#FF0000)。
但是它显示的不是红色而是另一种颜色。我们可以在setTextColor()中传递什么样的参数?在文档中,它说的是int,但它是资源引用值还是其他什么?
如果你计划使用setTextAppearance,你应该知道它会用继承自主题的样式覆盖文本颜色。所以如果你想两者都用,然后再设置颜色。
如此:
textView.setTextAppearance(context, android.R.style.TextAppearance_Medium);
textView.setTextColor(Color.RED);
这将导致你的textcolor为白色(暗主题)或黑色(浅主题):
textView.setTextColor(Color.RED);
textView.setTextAppearance(context, android.R.style.TextAppearance_Medium);
与此相反,在XML中顺序是任意的。
我这样做的一个TextView在一个ViewHolder为一个RecyclerView。我不太确定为什么,但它在ViewHolder初始化时对我不起作用。
public ViewHolder(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.text_view);
textView.setTextColor(context.getResources().getColor(R.color.myColor));
// Other stuff
}
但是当我把它移到onBindViewHolder时,它工作得很好。
public void onBindViewHolder(ViewHolder holder, int position){
// Other stuff
holder.textView.setTextColor(context.getResources().getColor(R.color.myColor));
}
希望这能帮助到一些人。
如果你使用Kotlin,有4种方法:(与Holder)
使用Android资源:
holder.textView.setTextColor (Color.GREEN)
使用RGB:
holder.textView.setTextColor(颜色。Rgb (255, 87, 34))
3)使用十六进制:
holder.textView.setTextColor(Color.parseColor("#C2185B"))
4)使用项目资源:(需要API级别23)
holder.textView.setTextColor(context.resources.getColor(R.color.colorMax,null))