Уменьшить яркость ListRow, только если он находится в фокусе - PullRequest
1 голос
/ 24 апреля 2020

В настоящее время я сталкиваюсь с проблемой реализации пользовательского регулятора яркости фокуса в ListRow в Android ТВ-приложении.

Ожидаемое поведение: каждый элемент в ListRow имеет прозрачное серое наложение. Это наложение невидимо, когда элемент имеет фокус, и видно, когда элемент не в фокусе. Теперь самое сложное: такое поведение ожидается только в том случае, если в фокусе находится сам ListRow. Это означает: всякий раз, когда я фокусирую другую ListRow, навигацию или любое другое представление, серые наложения всех элементов должны быть невидимыми (как если бы все элементы были в фокусе). логическое значение selectEffectEnabled, которое должно обеспечивать указанное поведение. Однако, когда я устанавливаю selectEffectEnabled = true, только ранее выбранные элементы затемняются, а не (как ожидалось) все не сфокусированные элементы.

То, что я сделал вместо этого: теперь у каждого представления элемента есть OnFocusChangeListener, подобный этому:

setOnFocusChangeListener { _, hasFocus ->
     transparent_overlay.visibility = if (hasFocus) View.GONE else View.VISIBLE
} 

Можно ли также проверить, имеет ли родительский вид представления элемента фокус, так, чтобы наложение также было ушел ли родитель потерял сосредоточенность? Если нет: есть ли другой способ реализовать описанное поведение?

Заранее спасибо!

...