Ответ 1
Базовая установка довольно проста. Запуск его в приложение займет определенную работу.
Вам необходимо использовать API Доступность, а также WindowManager#addView(...)
.
Это взломать?
Я не могу сказать, что мне нравится эта идея, но это не совсем хак.
Как они меняются, а не только цвет навигации бар, но даже установить фоновое изображение для него (в том числе динамическое, для состояния батареи)?
Поскольку мы добавляем View
(или ViewGroup
), у нас намного больше контроля.
Можно ли также изменить другие системные панели, например панель уведомлений?
Я рассмотрю это.
Как проверить, какое приложение находится на переднем плане (необходимо для принятия решения когда менять цвет на основе текущего приложения, вероятно)?
Вы можете использовать API Accessibility для прослушивания изменений уровня Window
(AccessibilityEvent
) - это даст вам имя_пакета. Используйте его как хотите.
Я дам вам несколько указателей:
манифеста
- :
SYSTEM_ALERT_WINDOW
- Объявление службы доступности:
<service />
Accessibilityservice
- Наполните, инициализируйте и добавьте свой макет в:
onServiceConnected()
- Я использовал
TYPE_SYSTEM_OVERLAY
сWindowManager#addView(...)
- Слушайте AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED
- Переопределить
onAccessibilityEvent(AccessibilityEvent)
; имя_пакета будет доступно здесь
Результат
Здесь представлен пример проекта: Ссылка.