Раскрашивание значка переключения панели навигации через setTint не работает после навигации - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь программно раскрасить значок переключения панели навигации (значок меню гамбургера), когда 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 не устанавливает оттенок для моего значка переключения. Почему это происходит и как это исправить?

...