Android Custom View
Реализовываю возможность изменения темы динамически, Для этого нужно реализовать custom View.
Например button
data class
data class ButtonTheme (
@ColorRes
val textColor: Int,
@ColorRes
val color: Int,
@StyleRes
val style: Int
//Что для стилей выбирать?
)
Theme
enum class Theme(
val buttonTheme: ButtonTheme
){
DARK(
buttonTheme = ButtonTheme(
color = android.R.color.holo_blue_bright,
textColor = android.R.color.white,
style =
)
),
LIGHT(
buttonTheme = ButtonTheme(
color = android.R.color.holo_orange_dark,
textColor = android.R.color.black
)
)
}
button
class MyButton
@JvmOverloads
constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : AppCompatButton(context, attrs, defStyleAttr), ThemeManager.ThemeChangedListener {
override fun onFinishInflate() {
super.onFinishInflate()
ThemeManager.addListener(this)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
ThemeManager.addListener(this)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
ThemeManager.removeListener(this)
}
override fun onThemeChanged(theme: Theme) {
setTextColor(
ContextCompat.getColor(context, theme.buttonTheme.textColor)
)
setBackgroundColor(ContextCompat.getColor(context, theme.buttonTheme.color)
)
}
}
Вопрос: по коду видно, что я беру android-вские цвета. Как мне достучаться до своих, объявленные в res/colors?
Update Я хочу, чтобы Button использовал Material Style
<style name="Login.Button.Outlined" parent="Widget.MaterialComponents.Button.OutlinedButton">
<item name="strokeColor">@android:color/white</item>
<item name="android:textColor">@android:color/white</item>
<item name="rippleColor">@android:color/white</item>
</style>
Я могу создать отдельный style под темную тему, например
<style name="Login.Button.Outlined.Dark" parent="Widget.MaterialComponents.Button.OutlinedButton">
<item name="strokeColor">@android:color/black</item>
<item name="android:textColor">@android:color/black</item>
<item name="rippleColor">@android:color/black</item>
</style>
Я могу выбирать соответствующий стиль в
enum class Theme(
val buttonTheme: ButtonTheme
){
DARK(
buttonTheme = ButtonTheme(
color = android.R.color.holo_blue_bright,
textColor = android.R.color.white,
style = R.style.Login_Button_Outlined_Dark
)
),
LIGHT(
buttonTheme = ButtonTheme(
color = android.R.color.holo_orange_dark,
textColor = android.R.color.black,
style = R.style.Login_Button_Outlined_Dark
)
)
}
Но как установить соответствующий style?, нету никакого метода setStyle, style и т.д?, как наравне с setTextColor.
Либо как использовать, например rippleColor, strokeColor (это из Material Design).
Надеюсь я объяснил доходчиво и примеры понятны
В качестве образца использовал ЭТУ статью источник