Android 中具有动态 ActionBar 颜色的半透明 StatusBar

2023-11-25

我正在尝试实现一个半透明的状态栏(以便我的导航视图是BEHIND状态栏)但仍然喜欢动态更改操作栏的颜色。因此,状态栏颜色需要更改为操作栏颜色的较暗版本。

如果我将状态栏设置为透明,正如许多消息来源所建议的那样,我的 Primary_dark 颜色将用作状态栏的背景。但是,由于我将在运行时更改操作栏颜色,primary_dark 不一定是操作栏的深色。

如果我将状态栏设置为操作栏颜色,透明度就会消失。如果我将状态栏设置为操作栏颜色并添加透明度,则状态栏看起来既不错误也不正确,并且我的重叠导航视图仍然不是很“透明”/“多彩”。

Google 收件箱具有三种不同的颜色:收件箱(蓝色)、延后(黄色)和完成(绿色)。

我可以做什么来实现这种行为?


实际上,它相当容易实现。

enter image description here

第一步 - 改变高度Toolbar:

  • change height to wrap_content

所以对我来说它看起来像这样:

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

然后你覆盖资源v19:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
            <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
                    <!-- Style properties -->
                    ....
                    <!-- These properties are important:-->
                    <item name="android:windowTranslucentStatus">true</item>
                    <item name="windowActionBarOverlay">false</item>
                    <item name="android:windowActionBarOverlay">false</item>
                    <item name="android:fitsSystemWindows">false</item>
            </style>
    </resources>

然后,在Activity, 环境padding为了Toolbar:

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    toolbar.setPadding(0, getStatusBarHeight(), 0, 0);
    ......
    ......
    public int getStatusBarHeight() {
        int result = 0;

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
            int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
            if (resourceId > 0) {
                result = getResources().getDimensionPixelSize(resourceId);
            }
        }
        return result;
    }

事实上,差不多就是这样。现在,一旦我想更改工具栏的颜色,我就这样调用:

    if (getSupportActionBar() != null) {
        getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.GREEN));
    }

活动布置:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="false"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</android.support.v4.widget.DrawerLayout>

NB!在 Kitkat 之前的操作系统版本上,状态栏保持不变,非半透明。

我已将测试应用程序的源代码上传到我的保管箱 -请随意查看.

我希望,它有帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 中具有动态 ActionBar 颜色的半透明 StatusBar 的相关文章

  • Android:使用 OAuth 访问 google 任务时出现问题

    由于 google 任务没有公共 api 我想编写解决方法并像浏览器一样请求数据 然后解析结果以进一步显示 为了访问数据 我使用 google 实现了 OAuth 身份验证来访问此 url https mail google com htt
  • 在android中通过BLE传输图像

    我使用以下代码传输 1 MB 的图像 如果在每个数据包之间实现线程延迟 则图像将成功传输 如果未设置线程延迟 则所有数据包均从BluetoothGattServer 发送 但BluetoothGattCallback 不会接收所有数据包 任
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • Android Library项目使用gradle在命令行编译时无法导入另一个库项目的R类

    我的 android 项目有这样的结构 ProjectDir settings gradle MyApp depends on LibraryA and LibraryB gt build gradle gt All the other a
  • 如何在手机缓存中保存用户名和密码

    我有一个用户登录应用程序 它需要用户的电子邮件和密码 我想将电子邮件和密码保存在手机缓存中 以便用户不必再次输入 有什么办法可以将数据保存在Android缓存中吗 我认为你需要使用SharedPreference用于在设备中使用应用程序时保
  • Camera.open()返回NULL Android开发

    我正在按照构建相机应用程序的教程进行操作http developer android com tools device html http developer android com tools device html我对 Camera o
  • glTexImage2D: 之前出错:( 0x506 内部 0x1908 格式 0x1908 类型 0x1401

    当使用 Android Studio 运行模拟器时 我在模拟器屏幕上看不到任何内容 一切都是黑色的 我得到以下事件日志 模拟器 glTexImage2D 出错了 0x506 内部 0x1908 格式 0x1908 类型 0x1401 我已经
  • Android 应用程序中的 Eszett (ß)

    我的 res layout activity 文件中的德语 字符在我的应用程序中自动转换为 ss 即使我将语言和键盘设置为德语 它仍然不会显示 Android 中可以显示 吗 edit
  • 使用 gradlew assembleRelease 从 React Native 创建发布 apk 时出现错误

    我想发布 apk 但我收到错误 文件已存在 mkdir D mobile 它在 d 驱动器中生成名为 mobile 的文件 删除文件后 再次执行 gradlew assembleRelease 创建该文件并抛出错误 任务 app bundl
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 菜单在片段的 onCreateOptionsMenu 处多次膨胀调用

    我使用 Fragments 当我切换到嵌套 Fragment 时 它实现了public void onCreateOptionsMenu Menu menu MenuInflater inflater 当我到达该嵌套片段时 我的菜单会多次膨
  • 在 Android 中调整可绘制对象的大小

    我正在为进度对话框设置一个可绘制对象 pbarDialog 但我的问题是我想每次调整可绘制的大小 但不知道如何调整 这是一些代码 Handler progressHandler new Handler public void handleM
  • 如何在 Viewpager 中禁用预加载下一页? [复制]

    这个问题在这里已经有答案了 如何在 Viewpager 中禁用页面预加载 I tried viewPager setOffscreenPageLimit 0 但它不起作用 用这个viewPager setOffscreenPageLimit
  • 有关 ListView 自定义行布局项目上的 onClick() 事件的帮助

    我有一个 ListView 其行由我格式化 每行都有 ImageView 和 TextView 的混合 我还实现了自己的适配器 并且能够通过它绘制每一行 现在 我想要这样的东西 用户单击 ImageView 不是行上的其他任何位置 但只有此
  • java.lang.NumberFormatException: Invalid int: "3546504756",这个错误是什么意思?

    我正在创建一个 Android 应用程序 并且正在从文本文件中读取一些坐标 我在用着Integer parseInt xCoordinateStringFromFile 将 X 坐标转换为整数 Y 坐标的转换方法相同 当我运行该应用程序时
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb
  • Android:RecyclerView 不显示片段中的列表项

    有人可以帮我尝试让我的 RecyclerView 出现吗 如果我不在片段中实现它 就会出现这种情况 然而 当我尝试将其实现到片段中时 CarFront 中的其他 XML 代码与 RecyclerView 分开显示 我的日志中收到此错误 E
  • 尝试将 SQLite DB 从数据复制到 SD 卡

    我正在使用以下代码 该代码发布在 Stack Overflow 上的某个位置 并根据我的目的进行了修改 try File sd Environment getExternalStorageDirectory File data Enviro
  • Android 中带有组的列表视图

    我有一个列表视图 每行都有一些日期和文本 我可以像 iPhone 中那样将这个 listView 分组 组之间有标题吗 在 android 中是否可能 请帮忙 即 我需要在 Listview 行之间有标题栏 以便如果我使用日期对其进行分组

随机推荐

  • Windows系统上的IOS编程[重复]

    这个问题在这里已经有答案了 我有兴趣学习 IOS 编程 但目前我无法访问 Macintosh 系统 只是想知道是否有适用于 Windows 的 IOS SDK 的等效版本 不过我有一部 iPhone 您可以查看GNUStep这是一个跨平台的
  • 设置 Z 索引不起作用。容器后面的按钮(HTML - CSS)

    I using Metro css windows 8 style and have a problem I have container with alerts the blue in the picture and above ther
  • MS Access VBA - 在数据表子表单中显示动态构建的 SQL 结果

    我在 MS Office 应用程序 用于自动化和 ETL 流程 中拥有多年使用 VBA 的经验 但直到最近才需要处理 MS Access 中的表单 我正在为我设计的数据库设计一些简单的数据提取表单 并专注于看似简单的任务 目标 我需要一个数
  • 具有 tf 数据集输入的 Tensorflow keras

    我是张量流 keras 和数据集的新手 谁能帮我理解为什么下面的代码不起作用 import tensorflow as tf import tensorflow keras as keras import numpy as np from
  • 每 60 秒调用一次函数

    Using setTimeout 可以在指定时间启动一个功能 setTimeout function 60000 但是如果我想多次启动该功能怎么办 每次经过一个时间间隔 我都会执行该函数 假设每 60 秒一次 如果您不关心代码是否在time
  • Task.WhenAll 不等待

    我正在学习如何在控制台应用程序中使用异步函数 但无法使 Task WhenAll 等到所有任务完成 下面的代码有什么问题 它同步工作 先感谢您 static void Main string args IncluiValores stati
  • 让阴影在 Three.js 自定义着色器中工作

    我正在尝试让阴影在 Three js 中的自定义着色器中工作 我尝试将这些添加到我的代码中 穿着制服 THREE UniformsLib shadowmap 在片段着色器中 THREE ShaderChunk shadowmap pars
  • 创建特定尺寸的绘图窗口

    如何创建具有特定宽度和高度 以像素等为单位 的新屏幕 R 绘图窗口 Use dev new See 这个相关问题 plot 1 10 dev new width 5 height 4 plot 1 20 更具体地说使用哪些单位 dev ne
  • 将对象从注入的页面脚本传递到内容脚本

    我正在编写一个 chrome 扩展 并且正在努力将对象从主页传递回内容脚本 我似乎无法访问窗口的变量 内容脚本 STORE DATA TO CHROME STORAGE ON EVENT create hidden input var hi
  • 带有 -weak_library /usr/lib/libSystem.B.dylib 链接器标志的 objc_setAssociatedObject 上的 EXC_BAD_ACCESS

    我有一个EXC BAD ACCESS当我打电话时objc setAssociatedObject使用链接器标志 weak library usr lib libSystem B dylib链接器标志 我绝对需要链接器标志 因为this 有人
  • PHP,HTML:自动提交表单[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 询问代码的问题必须对所解决的问题表现出最低限度的了解 包括尝试的解决方案 为什么不起作用以及预期结果 也可以看看 Stack Overflow 问题清单 有关您编写的代码的问题必须描
  • 附加文本未在 d3 v4 中显示

    我正在尝试 翻译 平行坐标示例到新版本的 d3 v4 我有一个使用此 javascript 的工作示例 如果有人尝试使用 d3 的 v4 并对新功能有问题 这也是一个很好的示例 var margin top 30 right 10 bott
  • 如何让 jQuery 等待 Ajax 调用完成后再返回?

    我有一个需要登录的服务器端功能 如果用户登录 该函数将在成功时返回 1 如果没有 该函数将返回登录页面 我想使用 Ajax 和 jQuery 调用该函数 我所做的就是使用普通链接提交请求 并在其上应用点击功能 如果用户未登录或函数失败 我希
  • 是否有可以检查表情符号的特定范围的 unicode 代码点?

    表情符号是否占据明确定义的 unicode 范围 并且 在 python 2 7 中是否有确定的方法来检查代码点是否是表情符号 我似乎找不到这方面的任何信息 有几个消息来源指出了这个范围 U0001f600 U0001f650 但例如 有代
  • 即使使用 ChangeDetectionStrategy.OnPush 也会调用 Angular ngDoCheck()

    可以说我有一个像这样的组件结构 AppComponent HeaderComponent ContentComponent TodosComponent TodoComponent 如果我设置 HeaderComponent 的change
  • 从 BGL 图中提取邻接矩阵

    使用Boost图库我正在寻找一种方法提取邻接矩阵来自由以下任一表示的基础图boost adjacency list or boost adjacency matrix 我想结合使用这个矩阵boost numeric ublas求解联立线性方
  • 如何在 shell 中以可移植的方式在第一个空行上分割文件(例如使用 sed)?

    我想将包含 HTTP 响应的文件拆分为两个文件 一个仅包含 HTTP 标头 另一个包含消息正文 为此 我需要在第一个空行上将文件分成两个 或者对于仅包含 CR 的第一行的 UNIX 工具 r 字符 使用外壳脚本 如何以可移植的方式执行此操作
  • 错误 android SurfaceFlinger

    我有这个错误消息 SurfaceFlinger 半透明 0 isOpaque 1 isExternalDisplayLayer 0 isExternalBlockLayer0 我使用的是安卓4 1 1 我无法说出我的代码的哪一部分正在生成此
  • 使用 Watir 检查坏链接

    我有一个无序列表的链接 我保存在一边 我想单击每个链接并确保它转到真实页面 而不是 404 500 等 问题是我不知道该怎么做 是否有一些我可以检查的对象可以为我提供 http 状态代码或其他内容 mylinks Browser ul id
  • Android 中具有动态 ActionBar 颜色的半透明 StatusBar

    我正在尝试实现一个半透明的状态栏 以便我的导航视图是BEHIND状态栏 但仍然喜欢动态更改操作栏的颜色 因此 状态栏颜色需要更改为操作栏颜色的较暗版本 如果我将状态栏设置为透明 正如许多消息来源所建议的那样 我的 Primary dark