Android Изменить статусБарЦвет доверенной веб-активности

Я создаю на основе этого репозитория свое первое приложение TWA / PWA. Все работает нормально, но я не могу изменить цвет строки состояния.

Я изменяю этот файл и добавляю эту строку в <style> тег:

<item name="android:statusBarColor">@color/ic_launcher_background</item>

Дело в том, что... он хорошо работает при первом запуске приложения... Но через 500 мс после первого запуска он запускает веб-просмотр и statusBarColor снова становится белым.

Любая идея, как я могу это исправить?

2 ответа

Вы должны добавить новые метаданные в свой AndroidManifest, где вы объявили Trusted Web Activity (android.support.customtabs.trusted.STATUS_BAR_COLOR)

 <activity android:name="android.support.customtabs.trusted.LauncherActivity">
    <meta-data
        android:name="android.support.customtabs.trusted.DEFAULT_URL"
        android:value="https://your-host.com/" />
    <meta-data
        android:name="android.support.customtabs.trusted.STATUS_BAR_COLOR"
        android:resource="@color/colorPrimaryDark" />
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE"/>
        <data
            android:scheme="https"
            android:host="your-host.com"/>
    </intent-filter>
</activity>

Обновлено: последняя версия библиотеки поддержки ( e849e45c90) была обновлена, чтобы упростить изменение цвета строки состояния.

Образец SVGOMG был обновлен, чтобы использовать его, и необходимые изменения для приложений, чтобы заставить его работать, можно увидеть в этом запросе извлечения.

Секция ниже устарела, но оставлена ​​здесь для исторического контекста

Можно изменить цвет строки состояния, настроив его при открытии намерения пользовательских вкладок.

В настоящее время это не настраивается в манифесте, и основной способ сделать это:

  1. Скопируйте LauncherActivity из репозитория библиотеки поддержки в ваш проект.
  2. измените ссылку в AndroidManifest.xml на вашу копию реализации.
  3. Настройте код LauncherActivity для настройки строки состояния, заменив метод getCustomTabsIntent чем-то вроде приведенного ниже кода:
    protected CustomTabsIntent getCustomTabsIntent(CustomTabsSession session) {
        return new CustomTabsIntent.Builder(session)
          .setToolbarColor(Color.parseColor("#FF0000"))
          .build();
    }

Код выше создаст красную строку состояния. замещать #FF0000 с желанием цвета.

Попробуйте добавить этот код на onResume()

public void setStatusBarColor(int color) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().setStatusBarColor(color);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }
}
Другие вопросы по тегам