Я пытаюсь программно раскрасить значок переключения панели навигации (значок меню гамбургера), когда CollapsingToolbarLayout разворачивается / сворачивается. Я загрузил приложение на Github . Пожалуйста, попробуйте запустить его, чтобы лучше понять, что я имею в виду.
Я также буду раскрашивать значок переключения своего навигационного ящика, когда CollapsingToolbarLayout
свернут и развернут, используя следующий код (расположенный внутри MainActivity.kt
).
private val onBackgroundColor by lazy {
val value = TypedValue()
theme.resolveAttribute(R.attr.colorOnBackground, value, true)
value.data
}
private fun setupCollapsingToolbar() {
binding.actMainAppbarlayout.addOnOffsetChangedListener(
OnOffsetChangedListener { appBarLayout, verticalOffset ->
if (abs(verticalOffset) - appBarLayout.totalScrollRange == 0) { // Collapsed
changeMenuIconColor("onBackground")
} else if (verticalOffset == 0) { // Fully expanded
changeMenuIconColor("white")
}
}
)
}
private fun changeMenuIconColor(color: String) {
var tintColor = Color.WHITE
when (color) {
"white" -> tintColor = Color.WHITE
"onBackground" -> tintColor = onBackgroundColor
}
binding.actMainToolbar.navigationIcon?.setTint(tintColor)
}
Это отлично работает перед перемещением . Сначала попробуйте развернуть и свернуть CollapsingToolbarLayout
, setTint
работает отлично. Затем, после перехода (например, щелчка на странице «Информация») и возврата на домашнюю страницу, setTint
больше не работает (даже если вы несколько раз расширяете и сворачиваете). Я зарегистрировал цвет, и цвет выбран правильно; просто кажется, что setTint
не устанавливает оттенок для моего значка переключения. Почему это происходит и как это исправить?