安卓如何更改可信网页活动的状态栏颜色

3
我基于这个仓库构建了我的第一个TWA/PWA应用程序。一切都很好,但我无法更改状态栏的颜色。
我修改了这个文件并在<style>标签中添加了这行代码: <item name="android:statusBarColor">@color/ic_launcher_background</item> 问题是...它在应用程序的第一次初始化时可以正常工作...但是在500毫秒后开始加载webview时,状态栏的颜色又变成了白色。
您有什么想法如何解决这个问题吗?
3个回答

4

在声明可信任的Web活动(android.support.customtabs.trusted.STATUS_BAR_COLOR)时,您应该在AndroidManifest中添加新的元数据。

 <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>

这不再需要了。@andreban已经在TWA存储库中添加了一个配置条目。 - Budi

4
更新: 支持库的最新版本(e849e45c90)已更新,使更改状态栏颜色变得更加容易。 SVGOMG样本已更新以使用它,并且应用程序进行必要的更改才能使其正常工作可以在此拉取请求中查看。 以下部分已过时,但为了历史背景而保留。 可以通过在打开自定义选项卡意图时定制来更改状态栏颜色。
目前无法在清单中配置此功能,主要方法是:
  1. LauncherActivity从支持库存储库复制到您的项目中。
  2. 将AndroidManifest.xml中的引用更改为您实现的副本。
  3. 通过将getCustomTabsIntent方法替换为以下代码来调整您的LauncherActivity代码以设置状态栏:
    protected CustomTabsIntent getCustomTabsIntent(CustomTabsSession session) {
        return new CustomTabsIntent.Builder(session)
          .setToolbarColor(Color.parseColor("#FF0000"))
          .build();
    }

上面的代码将创建一个红色状态栏。将#FF0000替换为所需颜色即可。

我需要问这个问题,因为这是我第一次使用Java/Android Studio。有没有一个常见的地方可以复制“LauncherActivity”?我应该把它放在app/src/main/LauncherActivity.java吗?而且我找不到任何路径在AndroidManifest.xml中,我如何更改对副本的引用? - Budi
在 AndroidManifest.xml 文件中的 activity 标签中,您需要更改:android:name=com.example.LauncherActivity - andreban
Android Studio自动将com.devMonkeys.expenser重构为com.expenser是正常的吗?另外,请编辑您的帖子并解释人们需要在LauncherActivity.java的第15行中更改package名称 :) 在您发布的函数中,我遇到了错误:cannot resolve symbol Color,其他东西看起来都很好。 - Budi
这有所帮助 :) 我看到LauncherActivity中的最后一个问题是:error: cannnot find symbol variable TrustedWebActivityService - Budi
我知道了。这个导入缺失了:import android.support.customtabs.trusted.TrustedWebActivityService; 现在它运行得很好 :) 非常感谢andreban为您的大力帮助和支持!我相信这个主题会帮助很多人 :) 您是否有关于Launcher Activity自定义选项的文档链接? - Budi
显示剩余2条评论

0
尝试在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);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接