it-swarm.com.ru

Программно изменить цвет фигуры в списке слоев

Как программно изменить цвет (#000000) фигуры в списке слоев?

Вот мой список слоев:

<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

Прежде всего вам нужно назначить идентификатор для вашего элемента layer-list.

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

Тогда получите свою форму по идентификатору.

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

И вы можете изменить цвет вашей формы, позвонив

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

ПРАВКА

Поскольку getDrawable() устарела. Используйте следующую строку кода.

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>

Тогда в вашем коде просто добавьте

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

Обновление октябрь-2016

getDrawable() устарела, вместо нее следует использовать ContextCompat.getDrawable(context, color).

Кроме того, если вы получаете LayerDrawable от findDrawableByLayerId(), то вам нужно было вызвать view.setBackground(layerDrawable), чтобы это вступило в силу. Кроме того, создание layerDrawable с помощью 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>

Найди свой взгляд

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

Установить цвет

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

Вы также можете получить растягиваемый или фоновый вид и установить его следующим образом.

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