Как изменить программно solid color в файле drawable/backborder.xml?

Нужно изменить цвет в строке xml-файла, описывающего background (задается через свойство background) <solid android:color="#FFFFFF" /> на другой. Как эту операцию сделать программно? Чтобы не пришлось подменять весь xml-файл. При кажущейся простоте вопроса ответ на сайте не нашел. Можно вроде как до строки в ресурсе добраться...

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/layer_id"
        android:left="-2dp"
        android:right="-2dp"
        android:top="-2dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="1dp"
                android:color="@color/border_dark_grey" />
            <solid android:color="#FFFFFF" />
        </shape>
    </item>
</layer-list>

Вот здесь вроде как рассматривался этот вопрос, но пока не понял:

drawable xml(android)

https://stackoverflow.com/questions/4772537/i-need-to-change-the-stroke-color-to-a-user-defined-color-nothing-to-do-with-th

https://stackoverflow.com/questions/13585496/change-shape-border-color-at-runtime


Ответы (1 шт):

Автор решения: Vadik

Чтобы программно поменять цвет для этого drawable, приведем его к LayerDrawable:

val layerDrawable = ContextCompat.getDrawable(this, R.drawable.backborder) as LayerDrawable

Далее, найдем нужный layer по идентификатору и приведем его к GradientDrawable:

val gradientDrawable = layerDrawable.findDrawableByLayerId(R.id.layer_id) as GradientDrawable

Этому gradient drawable можно задать цвет, это и будет solid цвет, который нам нужен:

gradientDrawable.setColor(Color.BLACK)

Теперь layer drawable изменен, можем его выставить как фон для TextView:

textView.background = layerDrawable
→ Ссылка