Java android changes the colors in the xml file

Java android changes the colors in the xml file … here is a solution to the problem.

Java android changes the colors in the xml file

I have

this xml where I have set the stroke color, but sometimes I want to change the stroke color programmatically. The file name is dummy.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#ffffffff" />

<stroke
        android:width="1dp"
        android:color="#ff000000" />

<padding
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp"
        android:top="1dp" />

<corners
        android:bottomLeftRadius="7dp"
        android:bottomRightRadius="7dp"
        android:topLeftRadius="7dp"
        android:topRightRadius="7dp" />
</shape>

I

want to change the color (stroke color) programmatically, how do I do it?

I’m using this xml:

  <LinearLayout
                android:layout_marginTop="2dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/a"
                android:layout_gravity="center"
                android:background="@drawable/dummy"
                android:layout_marginBottom="2sp"
                android:orientation="horizontal"
                android:padding="5dp">

<RelativeLayout
                    android:id="@+id/serverStatusWrapper"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="2dp"
                    android:background="@drawable/shadow_green"
                    android:padding="2dp">

<ImageView
                        android:id="@+id/serverStatus"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerInParent="true"
                        android:antialias="true"
                        android:src="@drawable/ic_settings_input_antenna_white_24dp" />

</RelativeLayout>

<RelativeLayout
                    android:id="@+id/locationStatusWrapper"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="@drawable/shadow_red"
                    android:padding="2dp">

<ImageView
                        android:id="@+id/locationStatus"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerInParent="true"
                        android:antialias="true"
                        android:src="@drawable/ic_warning_white_24dp" />
                </RelativeLayout>

</LinearLayout>

Solution

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.a);

You can change the stroke to

GradientDrawable drawable = (GradientDrawable)linearLayout.getBackground();
drawable.setStroke(3, Color.RED);

And you can change the solid color to

GradientDrawable drawable = (GradientDrawable)linearLayout.getBackground();
drawable.setColor(Color.RED);

Hope that helps

Related Problems and Solutions