CustomView в собственной библиотеке: Как изменить дэфолтные значения атрибутов?
Есть отдельный модуль AndroidLibary
В нем создаю кастомную вьюшку
Создаю кастомные атрибуты и даю им дэфолтные значения
<declare-styleable name="TestView">
<attr name="_name_TestView" format="string" />
<attr name="_info_TestView" format="string" />
</declare-styleable>
<style name="TestView">
<item name="_name_TestView">test</item>
<item name="_info_TestView">info</item>
</style>
Получаю атрибуты в коде
context.theme.obtainStyledAttributes(
attrs,
R.styleable.TestView,
0,
0
)
Подключаю модуль к проекту
Хочу изменить в теме проекта (не модуля), чтобы по умолчанию атрибут _name_TestView
был customTest
. Как это сделать?
Код вьюшки
class TestView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null
) : FrameLayout(context, attrs, R.attr.TestViewAtr) {
init {
inflate(context, R.layout.test_view, this)
}
private val xml =
context.theme.obtainStyledAttributes(
attrs,
R.styleable.TestView,
0,
0
)
val button by lazy { findViewById<Button>(R.id.testButton) }
val textView by lazy { findViewById<TextView>(R.id.textView) }
var text: String = xml.getStringOrThrow(R.styleable.TestView__name_TestView)
.apply { text = this }
set(value) {
field = value
button.setText(field)
}
var helpText: String = xml.getStringOrThrow(R.styleable.TestView__info_TestView)
.apply { helpText = this }
set(value) {
field = value
textView.text = field
}
private val closeXml = { xml.recycle() }.apply { this.invoke() }
}
Источник: Stack Overflow на русском