Код: Выделить всё
'com.google.android.material:material:1.12.0'
< /code>
и < /p>
'androidx.appcompat:appcompat:1.7.0'
< /code>
У меня есть фрагмент, который содержит представление переработчика. Когда я выбираю элемент (длинное нажатие) в Recyclerview, я ввожу ActionMode и показываю другую панель инструментов с действиями, специфичными для выбранного элемента (ы) < /p>
Я столкнулся с проблемой в Android 15, что Когда приложение входит в действие, строка состояния меняет цвет от моего ожидаемого синего на черный < /p>
, поэтому я посмотрел здесь различные решения, чтобы изменить цвет панели состояния в Android 15 и попытался реализовать их. Мое решение - что -то вроде этого: < /p>
override fun onCreateActionMode(
mode: ActionMode?, menu: Menu?
): Boolean {
val inflater: MenuInflater = mode?.menuInflater ?: return true
inflater.inflate(R.menu.multi_selection_menu, menu)
multiSelectionMenu = menu
// Deactivate PullToRefresh
setPullToRefreshActivation(false)
// some other buttons hid...
val color = getColor(R.color.bar_background)
setStatusBarColor(color, true)
return true
}
override fun onDestroyActionMode(mode: ActionMode?) {
// Activate PullToRefresh
setPullToRefreshActivation(true)
// Show hidden buttons...
// finished multi selection
detectedTagsAdapter.apply {
disableMultiSelect()
clearSelectedItems()
notifyDataSetChanged()
}
val color = getColor(R.color.bar_background)
setStatusBarColor(color, false)
}
private fun setStatusBarColor(color: Int, on: Boolean) {
val window = requireActivity().window
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
window.decorView.setOnApplyWindowInsetsListener { view, insets ->
val statusBarInsets = insets.getInsets(WindowInsets.Type.statusBars())
view.setBackgroundColor(color)
// Adjust padding to avoid overlap
if (on) {
// view.setPadding(0, statusBarInsets.top, 0, 0)
} else {
view.setPadding(0, 0, 0, 0)
}
// insets.consumeSystemWindowInsets() // makes both bars appear
insets.consumeStableInsets() //leaves a black bar
}
} else {
window.statusBarColor = color
}
}
< /code>
Итак - я возился с этим, чтобы попытаться заставить его работать.
Если вы видите комментарии в функциях SetTatusBarcolor < /code> Это в основном суммирует, где у меня есть до: < /p>
[*] Если у меня нет этой функции, то в Android 15 панель состояния становится черной, а не желающим цветом (синий) - но Панель инструментов меняется на Actionbar
[*] Если я не вызовуте какую -либо из функций потребления (поэтому последняя строка в SetOnApplyWindowisetsListener просто вставлена
[*] Аналогично, если я использую insets.consumestableInsets () Я все еще получаю черную строку состояния
[*] Если я использую insets.consumesystemwindowinsets () , то строка состояния перезаписана строкой действий (не может использовать строку действий, потому что строка состояния получает штрихи), а обычная панель инструментов все еще остается видимый
[*] Если, используя insets.consumesystemwindowinsets () я добавляю в код, чтобы вставить в Статусбаринсертс верхняя прокладка, затем строка состояния сохраняет свой цвет (ура!), Но теперь я вижу как панель действий, а затем под ним - оригинальная панель инструментов (которая должна быть заменена панелью действий
Документация по этому поводу чрезвычайно слаба, может ли кто -нибудь объяснить, почему в Android 15 Bare не просто заменяет обычную панель инструментов? Он отлично работает в Android 14 и ниже. < /P>
Любая помощь будет оценена. < /P>
Я уверен Сочинять, но это огромный устаревший проект, и у меня нет досуга, чтобы переписать весь пользовательский интерфейс только потому, что у одного экрана есть ошибка в Android 15
Подробнее здесь: https://stackoverflow.com/questions/793 ... actionmode