it-swarm.com.de

Formgesteuert die Farbe der Form in der Ebenenliste ändern

Wie kann ich die Farbe (#000000) einer Form in einer Ebenenliste programmgesteuert ändern?

Hier ist meine Ebenenliste:

<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item>
        <shape Android:shape="rectangle">
            <solid Android:color="#000000" /> // CHANGE THIS COLOR
        </shape>
    </item>
    <item Android:left="5dp">
        <shape Android:shape="rectangle">
            <solid Android:color="@color/bg" />
        </shape>
    </item>
</layer-list>
28
user

Als Erstes müssen Sie Ihrem layer-list-Element eine ID zuweisen.

<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!-- First assign id to the list item-->
    <item  Android:id="@+id/your_shape">  
        <shape Android:shape="rectangle">
            <solid Android:color="#000000" /> 
        </shape>
    </item>
    <item Android:left="5dp">
        <shape Android:shape="rectangle">
            <solid Android:color="@color/bg" />
        </shape>
    </item>
</layer-list>

Dann bekomme deine Form durch die ID.

LayerDrawable shape = (LayerDrawable) getResources().getDrawable(R.drawable.your_shape)

Und Sie können die Farbe Ihrer Form ändern, indem Sie anrufen

shape.setColor(Color.Black); // changing to black color

EDIT

Da getDrawable() abgelehnt wurde. Verwenden Sie die folgende Codezeile.

LayerDrawable shape = (LayerDrawable) ContextCompat.getDrawable(YourActivity.this,R.drawable.your_shape)
16
Noman Rafique
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:id="@+id/gradientDrawble"> // Give id
        <shape Android:shape="rectangle">
            <solid Android:color="#000000" /> // CHANGE THIS COLOR
        </shape>
    </item>
    <item Android:left="5dp">
        <shape Android:shape="rectangle">
            <solid Android:color="@color/bg" />
        </shape>
    </item>
</layer-list>

Dann fügen Sie einfach den Code hinzu

LayerDrawable layerDrawable = (LayerDrawable) getResources()
            .getDrawable(R.drawable.my_drawable);
GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable
            .findDrawableByLayerId(R.id.gradientDrawble);
gradientDrawable.setColor(color); // change color

Update Oktober 2016

getDrawable() ist nun veraltet, Sie sollten stattdessen ContextCompat.getDrawable(context, color) verwenden.

Wenn Sie LayerDrawable von findDrawableByLayerId() erhalten, müssen Sie view.setBackground(layerDrawable) aufrufen, damit dies wirksam wird. Alternativ funktionierte auch das Instantiieren der layerDrawable durch view.getBackground().

48
Suhail Mehta
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <item Android:id="@+id/outer">
        <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
            Android:shape="oval">
            <size Android:height="40dp" Android:width="40dp"/>
            <padding Android:top="3dp" Android:bottom="3dp" Android:right="3dp" Android:left="3dp"/>
            <stroke
                Android:width="1dp"
                Android:color="#ffffff"/>
        </shape>
    </item>

    <item Android:id="@+id/middle">
        <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
            Android:shape="oval">
            <size Android:height="40dp" Android:width="40dp"/>
            <padding Android:top="2dp" Android:bottom="2dp" Android:right="2dp" Android:left="2dp"/>
            <stroke
                Android:width="3dp"
                Android:color="#ffffff"/>
        </shape>
    </item>

    <item Android:id="@+id/inner">
        <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
            Android:shape="oval">
            <size Android:height="40dp" Android:width="40dp"/>
            <solid
                Android:color="#ffffff"/>
        </shape>
    </item>
</layer-list>

Finden Sie Ihre Ansicht

LayerDrawable layerDrawable = (LayerDrawable) yourView.getBackground();
GradientDrawable outer = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.outer);
GradientDrawable middle = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.middle);
GradientDrawable inner = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.inner);

Farbe einstellen

outer.setColor(Color.parseColor(#000000));
inner.setColor(Color.parseColor(#FFFFFF));
2
Ketan Ramani

Sie können auch den Hintergrund der Ansicht zeichnen und wie folgt festlegen.

LayerDrawable layerDrawable = (LayerDrawable) view.getDrawable(); //view.getBackground()
GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable
                .findDrawableByLayerId(R.id.layer_list_item_id);
gradientDrawable.setColor(ContextCompat.getColor(getContext(), R.color.colorPrimary));
0
Anoop M