Как изменить программно 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>
Вот здесь вроде как рассматривался этот вопрос, но пока не понял:
https://stackoverflow.com/questions/13585496/change-shape-border-color-at-runtime
Ответы (1 шт):
Чтобы программно поменять цвет для этого 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