如何以编程方式围绕angular落并设置随机背景颜色

我想绕过视图的angular落,并根据运行时的内容更改视图的颜色。

TextView v = new TextView(context); v.setText(tagsList.get(i)); if(i%2 == 0){ v.setBackgroundColor(Color.RED); }else{ v.setBackgroundColor(Color.BLUE); } v.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); v.setPadding(twoDP, twoDP, twoDP, twoDP); v.setBackgroundResource(R.drawable.tags_rounded_corners); 

我希望设置drawable和颜色会重叠,但他们不。 无论我执行第二个是由此产生的背景。

有没有办法以编程方式创build此视图,请记住,直到运行时才会决定背景颜色?

编辑:我只是现在换红色和蓝色进行testing。 稍后颜色将由用户select。

编辑:

tags_rounded_corners.xml:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <corners android:bottomRightRadius="2dp" android:bottomLeftRadius="2dp" android:topLeftRadius="2dp" android:topRightRadius="2dp"/> </shape> 

setBackgroundColor ,检索可绘制背景并设置其颜色:

 v.setBackgroundResource(R.drawable.tags_rounded_corners); GradientDrawable drawable = (GradientDrawable) v.getBackground(); if (i % 2 == 0) { drawable.setColor(Color.RED); } else { drawable.setColor(Color.BLUE); } 

另外,你可以在你的tags_rounded_corners.xml定义填充:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="4dp" /> <padding android:top="2dp" android:left="2dp" android:bottom="2dp" android:right="2dp" /> </shape> 

总的程序化方法来设置圆angular并将随机背景颜色添加到视图。 我没有testing过这个代码,但是你明白了。

  GradientDrawable shape = new GradientDrawable(); shape.setCornerRadius( 8 ); // add some color // You can add your random color generator here // and set color if (i % 2 == 0) { shape.setColor(Color.RED); } else { shape.setColor(Color.BLUE); } // now find your view and add background to it View view = (LinearLayout) findViewById( R.id.my_view ); view.setBackground(shape); 

这里我们使用渐变drawable,以便我们可以使用GradientDrawable#setCornerRadius因为ShapeDrawable不提供任何这样的方法。

我认为最快的方法是:

 GradientDrawable gradientDrawable = new GradientDrawable( GradientDrawable.Orientation.TOP_BOTTOM, //set a gradient direction new int[] {0xFF757775,0xFF151515}); //set the color of gradient gradientDrawable.setCornerRadius(10f); //set corner radius //Apply background to your view View view = (RelativeLayout) findViewById( R.id.my_view ); if(Build.VERSION.SDK_INT>=16) view.setBackground(gradientDrawable); else view.setBackgroundDrawable(gradientDrawable); 

如果你没有中风,你可以使用

 colorDrawable = resources.getDrawable(R.drawable.x_sd_circle); colorDrawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP); 

但是这也会改变笔画颜色