添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Android/Java:如何用int Color设置MaterialShapeDrawable的背景色?

2 人关注

我有一个带圆角的TextView。

Here is my code:

float radius = 10f;
ShapeAppearanceModel shapeAppearanceModel = new ShapeAppearanceModel()
   .toBuilder()
   .setAllCorners(CornerFamily.ROUNDED,radius)
   .build();
MaterialShapeDrawable shapeDrawable = new MaterialShapeDrawable(shapeAppearanceModel);
ViewCompat.setBackground(textView,shapeDrawable);

现在,我想通过编程来改变textView的背景颜色。

When I do :

shapeDrawable.setFillColor(ContextCompat.getColorStateList(this,R.color.design_default_color_background));

它是有效的;背景颜色被改变了。

现在,我想用一个int颜色来改变背景色,比如Color.RED或任何用Color.RGB(r, g, b, a)或Color.RGB(r, g, b)定义的随机颜色。

我怎样才能做到这一点?我应该使用 shapeDrawable.setFillColor 还是其他方法?

java
android
textview
toto_tata
toto_tata
发布于 2020-11-25
4 个回答
toto_tata
toto_tata
发布于 2022-07-30
已采纳
0 人赞同

对我的问题的回答。

这是我添加的代码,以便能够设置任何背景颜色。

 int[][] states = new int[][] {
                new int[] { android.R.attr.state_hovered}, // hovered
 int[] colors = new int[] {color};
 ColorStateList myColorList = new ColorStateList(states, colors);
 shapeDrawable.setFillColor(myColorList);
 shapeDrawable.setState(states[0]);

为了改变一个背景颜色而写这么多的代码,太疯狂了......

谢谢大家的帮助 !

简单的kotlin版本:shapeDrawable.fillColor = ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.yourcolor))
hardkgosai
hardkgosai
发布于 2022-07-30
0 人赞同

你可以为你的颜色定义全局值,就像这样

 public static final int RED = 0xffff0000;

并像这样使用。

 shapeDrawable.setFillColor(ContextCompat....(this, RED));
    
谢谢,但给出了:Resources$NotFoundException。资源 ID #0xffff0000 有什么想法?
试试这个int red = 0xff,在添加颜色代码后,最终int Red = 0xffff0000。我不确定,但可以试试。
Gabriele Mariotti
Gabriele Mariotti
发布于 2022-07-30
0 人赞同

方法 setFillColor ColorStateList 起作用。
你可以使用类似的东西。

int[][] states = new int[][] {
    new int[] { android.R.attr.state_focused}, // focused
    new int[] { android.R.attr.state_hovered}, // hovered
    new int[] { android.R.attr.state_enabled}, // enabled
    new int[] { }  // 
int[] colors = new int[] {
    Color.BLACK,
    Color.RED,
    Color....,
    Color....
ColorStateList myColorList = new ColorStateList(states, colors);