Android: изменение цвета списка слоев

У меня есть список слоев

<?xml version = "1.0" encoding = "utf-8"?>
<layer-list xmlns:android = "http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape = "rectangle" >
            <solid android:color = "@color/custom_color" />
        </shape>
    </item>
    <item android:top = "-2dp" android:right = "-2dp" android:left = "-2dp">
        <shape>
            <solid android:color = "@android:color/transparent" />
            <stroke
                android:width = "1dp"
                android:color = "@android:color/white"/>
        </shape>
    </item>
</layer-list>

и хотел бы повторно использовать эту возможность рисования в нескольких местах моего проекта, так что @ color / custom_color (в приведенном выше примере) заменяется в каждом случае другим. Вместо создания отдельного объекта для рисования должен быть способ добиться этого. Любые идеи?

0
0
1 572
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Доступ к custom_color в форме прямоугольника должен осуществляться через id, скажем, через android:id = "@+id/shape_rectangle", поэтому сначала определите его в xml:
.

<?xml version = "1.0" encoding = "utf-8"?>
<layer-list xmlns:android = "http://schemas.android.com/apk/res/android">
    <item android:id = "@+id/shape_rectangle">
        <shape android:shape = "rectangle" >
            <solid android:color = "@color/custom_color" />
        </shape>
    </item>
    <item android:top = "-2dp" android:right = "-2dp" android:left = "-2dp">
        <shape>
            <solid android:color = "@android:color/transparent" />
            <stroke
                android:width = "1dp"
                android:color = "@android:color/white"/>
        </shape>
    </item>
</layer-list>

затем:

    LayerDrawable shapeRectangle = (LayerDrawable) ContextCompat.getDrawable(context, R.drawable.custom_layer);
    GradientDrawable gradient = (GradientDrawable) shapeRectangle.findDrawableByLayerId(R.id.shape_rectangle);
    gradient.setColor(Color.RED);

замените custom_layer на имя вашего чертежа

спасибо, можно ли это сделать еще и в XML-макете или только из Java / Kotlin?

hhg 16.08.2018 08:37

@hhg Нет, я не думаю, что вы можете добиться того же с помощью xml.

user8959091 16.08.2018 10:39

Другие вопросы по теме