How to programmatically round corners and set random background colors

后端 未结 8 1694
眼角桃花
眼角桃花 2020-11-29 17:50

I\'d like to round the corners of a view and also change the color of the view based on the contents at runtime.

TextView v = new TextView(context);
v.setTex         


        
相关标签:
8条回答
  • 2020-11-29 18:21

    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> 
    
    0 讨论(0)
  • 2020-11-29 18:30

    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.

    0 讨论(0)
  • 2020-11-29 18:33

    You can better achieve it by using the DrawableCompat like this:

    Drawable backgroundDrawable = view.getBackground();             
    DrawableCompat.setTint(backgroundDrawable, newColor);
    
    0 讨论(0)
  • 2020-11-29 18:40

    If you are not having a stroke you can use

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

    but this will also change stroke color

    0 讨论(0)
  • 2020-11-29 18:42

    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 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);    
    
    0 讨论(0)
  • 2020-11-29 18:43

    You can dynamically change color of any items ( layout, textview ) . Try below code to set color programmatically in layout

    in activity.java file

    
    String quote_bg_color = "#FFC107"
    quoteContainer= (LinearLayout)view.findViewById(R.id.id_quotecontainer);
    quoteContainer.setBackgroundResource(R.drawable.layout_round);
    GradientDrawable drawable = (GradientDrawable) quoteContainer.getBackground();
    drawable.setColor(Color.parseColor(quote_bg_color));
    
    

    create layout_round.xml in drawable folder

    <?xml version="1.0" encoding="UTF-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <solid android:color="@color/colorPrimaryLight"/>
        <stroke android:width="0dp" android:color="#B1BCBE" />
        <corners android:radius="10dp"/>
        <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
    </shape>
    
    

    layout in activity.xml file

    <LinearLayout
            android:id="@+id/id_quotecontainer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
    
    ----other components---
    
    </LinearLayout>
    
    
    
    0 讨论(0)
提交回复
热议问题