How to programmatically round corners and set random background colors How to programmatically round corners and set random background colors android android

How to programmatically round corners and set random background colors


Instead of setBackgroundColor, retrieve the background drawable and set its color:

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);}

Also, you can define the padding within your 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> 


Total programmatic approach to set rounded corners and add random background color to a View.I have not tested the code, but you get the idea.

 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);

Here we are using gradient drawable so that we can make use of GradientDrawable#setCornerRadius because ShapeDrawable DOES NOT provide any such method.


I think the fastest way to do this is:

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