当前位置: 首页 > article >正文

「Unity3D」在Unity中使用C#控制显示Android的状态栏

Unity打包的Android默认都是全屏,如果想要在真机上显示状态栏,就需要额外设置,有两种方式:

  • 第一种,使用Android的Java代码去控制,然后以插件的方式放到Unity中,被C#调用。
  • 第二种,使用Unity封装的C#代码,直接调用Android上的Java代码,去控制。

本文采用第二种方法,简单快捷,但会有几个坑,全部避开之后才能正确显示,先给正确代码,再指出踩坑点——只有一个函数,直接运行即可,内部精确控制,可以自定义。

private void ShowStatusBar()
{#if UNITY_ANDROID && !UNITY_EDITORScreen.fullScreen     = false;using var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");using var activity    = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");activity.Call("runOnUiThread", new AndroidJavaRunnable(() =>{// WINDOW_FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS |// WINDOW_FLAG_FORCE_NOT_FULLSCREEN         | // WINDOW_FLAG_LAYOUT_IN_SCREEN             | // WINDOW_FLAG_TRANSLUCENT_STATUSvar flags             = unchecked((int) 0x80000000) | 0x00000800 | 0x00000100 | 0x04000000;// VIEW_SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |// SYSTEM_UI_FLAG_LIGHT_STATUS_BAR (black text and icons)var uiOptions         = 0x00000400 | 0x00002000;        // the outer unityPlayer and activity will be disposed by other threadusing var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");using var activity    = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");                        using var window      = activity.Call<AndroidJavaObject>("getWindow");using var view        = window.Call<AndroidJavaObject>("getDecorView");// 0xAARRGGBB// window.Call("setStatusBarColor",  unchecked((int) 0xFF000000));window.Call("setFlags", flags,       unchecked((int) 0xFFFFFFFF));view  .Call("setSystemUiVisibility", uiOptions);}));#endif
}   

需要注意的地方,在于:

  1. Screen.fullScreen = false——需要设置,否则状态栏会自动隐藏。

  2. runOnUiThread——需要控制Android UI的调用,在UI线程中执行。

  3. window.setFlags——设置布局,view.setSystemUiVisibility——设置外观。

  4. unchecked((int) 0x80000000)——这个越界int类型了,C#向Java传递会有问题,需要控制一下溢出。

  5. unityPlayeractivity——在匿名函数中需要重新获取,外部的会在外层函数结束时释放资源,内部的在UI线程中执行,所以不能用闭包捕获外层的使用。

  6. setFlags的第二个mask参数——这个0xFFFFFFFF会越界int类型,需要unchecked一下。

多布局与外观的控制,查看WINDOW_FLAG_SYSTEM_UI_FLAG的设定,添加到flagsuiOptions即可,注意int类型的越界处理。

相关文章:

「Unity3D」在Unity中使用C#控制显示Android的状态栏

Unity打包的Android默认都是全屏&#xff0c;如果想要在真机上显示状态栏&#xff0c;就需要额外设置&#xff0c;有两种方式&#xff1a; 第一种&#xff0c;使用Android的Java代码去控制&#xff0c;然后以插件的方式放到Unity中&#xff0c;被C#调用。第二种&#xff0c;使…...

Lua 环境的安装

1.安装Lua运行环境 本人采用的是在windows系统中使用cmd指令方式进行安装&#xff0c;安装指令如下&#xff1a; winget install "lua for windows" 也曾使用可执行程序安装过&#xff0c;但由于电脑是加密电脑&#xff0c;最后都已失败告终。使用此方式安装可以安…...

Pyside的QWebEngineProfile类

QWebEngineProfile 是 PySide/Qt 中用于管理浏览器引擎&#xff08;WebEngine&#xff09;配置的类&#xff0c;属于 QtWebEngineCore 模块。它主要用于控制网页的全局行为&#xff0c;例如缓存、Cookie、持久化存储、用户代理&#xff08;User-Agent&#xff09;、代理设置等。…...

java爬虫工具Jsoup学习

目录 前言 一、基本使用 二、爬取豆瓣电影的案例 三、Jsoup能做什么&#xff1f; 四、Jsoup相关概念 五、Jsoup获取文档 六、定位选择元素 七、获取数据 八、具体案例 前言 JSoup是一个用于处理HTML的Java库&#xff0c;它提供了一个非常方便类似于使用DOM&#xff0…...

基于SpringBoot电脑组装系统平台系统功能实现六

一、前言介绍&#xff1a; 1.1 项目摘要 随着科技的进步&#xff0c;计算机硬件技术日新月异&#xff0c;包括处理器&#xff08;CPU&#xff09;、主板、内存、显卡等关键部件的性能不断提升&#xff0c;为电脑组装提供了更多的选择和可能性。不同的硬件组合可以构建出不同类…...

Java实战项目-基于 springboot 的校园选课小程序(附源码,部署,文档)

Java 基于 springboot 的校园选课小程序 博主介绍&#xff1a;✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&…...

洛谷P3884 [JLOI2009] 二叉树问题(详解)c++

题目链接&#xff1a;P3884 [JLOI2009] 二叉树问题 - 洛谷 | 计算机科学教育新生态 1.题目解析 1&#xff1a;从8走向6的最短路径&#xff0c;向根节点就是向上走&#xff0c;从8到1会经过三条边&#xff0c;向叶节点就是向下走&#xff0c;从1走到6需要经过两条边&#xff0c…...

SQL99之内连接查询

SQL99是SQL语言的一个标准&#xff0c;于1999年发布。内连接查询是SQL中非常常用的一种查询方式&#xff0c;用于根据指定的条件从两个或多个表中获取相关联的数据。下面将详细介绍SQL99中的内连接查询&#xff0c;并以通熟易懂的语言进行讲解&#xff0c;同时给出代码例子、注…...

Qt Ribbon使用实例

采用SARibbon创建简单的ribbon界面 实例代码如下所示&#xff1a; 1、头文件&#xff1a; #pragma once #include <SARibbonBar.h> #include "SARibbonMainWindow.h" class QTextEdit; class SAProjectDemo1 : public SARibbonMainWindow { Q_OBJECT pub…...

【事务管理】

目录 一. 介绍与操作二. Spring事务管理三. 事务四大特性 \quad 一. 介绍与操作 \quad \quad 二. Spring事务管理 \quad 推荐加在经常进行增删改的方法上 \quad 三. 事务四大特性 \quad ctrlaltt...

[250129] Archinstall 3.0.2 发布 | Wolfram 语言与 Mathematica 14.2 版本发布

目录 Archinstall 3.0.2 版本发布Wolfram 语言与 Mathematica 14.2 版本发布&#x1f31f; 主要亮点 Archinstall 3.0.2 版本发布 Archlinux 的自动化安装程序 Archinstall 发布了 3.0.2 版本&#xff0c;该版本带来了大量的改进和修复&#xff0c;以及一些新功能和贡献者。 …...

以创新芯片技术助力科技发展

在当今数字化与智能化浪潮中&#xff0c;芯片作为现代科技的核心&#xff0c;正悄然推动着各个行业的变革。厦门国科安芯科技有限公司专注于高性能芯片的研发与创新&#xff0c;致力于为工业、汽车和商业航天等领域提供高效、可靠的解决方案。以下是国科安芯推出的几款具有代表…...

单细胞-第五节 多样本数据分析,打分R包AUCell

文件在单细胞\5_GC_py\1_single_cell\3.AUCell.Rmd 1.基因 rm(list = ls()) load("g.Rdata")2.AUCell https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9897923 IF: NA NA NA用这个文章里的方法,将单细胞亚群的marker基因与ros相关基因取交集,用作AUCell的基因集…...

详解:网站地图对快速收录的重要性

本文来自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/16.html 网站地图&#xff08;Sitemap&#xff09;在快速收录方面扮演着至关重要的角色。以下是对网站地图重要性的详细解析&#xff1a; 一、定义与功能 网站地图是一个包含网站上所有或…...

OSPF邻接关系无法建立之MTU问题

OSPF中路由器间从邻居到建立完全邻接需满足以下条件: 1、邻居之间网络通 2、建立邻接的接口不能为OSPF被动接口 3、两台路由器的HELLO时间间隔和DEAD时间间隔必须一致 4、两台路由器的router-id 必须不同 5、如果开了OSPF认证,认证方式和KEY必须一致 6、两台路由器建立…...

OpenEuler学习笔记(十五):在OpenEuler上搭建Java运行环境

一、在OpenEuler上搭建Java运行环境 在OpenEuler上搭建Java运行环境可以通过以下几种常见方式&#xff0c;下面分别介绍基于包管理器安装OpenJDK和手动安装Oracle JDK的步骤。 使用包管理器安装OpenJDK OpenJDK是Java开发工具包的开源实现&#xff0c;在OpenEuler上可以方便…...

【蓝桥杯省赛真题02】C++猫吃鱼 第十届蓝桥杯青少年创意编程大赛 算法思维 C++编程省赛真题解

目录 C猫吃鱼 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 七、推荐资料 C猫吃鱼 第十届蓝桥杯青少年创意编程大赛C选拔赛真题 一、题目要求 明明家从1号站点出发&#xff0c;开车去旅游&#xff0c;一共要经过n个…...

开源 OA 办公系统

目前尚未有关于勾股 OA 5.6.8 新春版发布的相关确切信息&#xff0c;但勾股 OA v5.6 已于 2025 年 1 月 19 日发布2。勾股 OA 是一款基于 ThinkPHP6 Layui MySql 打造的实用的开源的企业办公系统2。勾股 OA v5.6 的相关信息如下2&#xff1a; 系统特点 系统各功能模块一目了…...

SpringCloudGateWay和Sentinel结合做黑白名单来源控制

假设我们的分布式项目&#xff0c;admin是8087&#xff0c;gateway是8088&#xff0c;consumer是8086 我们一般的思路是我们的请求必须经过我们的网关8088然后网关转发到我们的分布式项目&#xff0c;那我要是没有处理我们绕过网关直接访问项目8087和8086不也是可以&#xff1…...

CVE-2020-0796永恒之蓝2.0(漏洞复现)

目录 前言 产生原因 影响范围 漏洞复现 复现环境 复现步骤 防御措施 总结 前言 在网络安全的战场上&#xff0c;漏洞一直是攻防双方关注的焦点。CVE-2020-0796&#xff0c;这个被称为 “永恒之蓝 2.0” 的漏洞&#xff0c;一度引起了广泛的关注与担忧。它究竟是怎样的…...

构建具身智能体的时空宇宙!GRUtopia:畅想城市规模下通用机器人的生活图景

作者&#xff1a; Hanqing Wang, Jiahe Chen, Wensi Huang, Qingwei Ben, Tai Wang, Boyu Mi, Tao Huang, Siheng Zhao, Yilun Chen, Sizhe Yang, Peizhou Cao, Wenye Yu, Zichao Ye, Jialun Li, Junfeng Long, Zirui Wang, Huiling Wang, Ying Zhao, Zhongying Tu, Yu Qiao, D…...

1.五子棋对弈python解法——2024年省赛蓝桥杯真题

问题描述 原题传送门&#xff1a;1.五子棋对弈 - 蓝桥云课 "在五子棋的对弈中&#xff0c;友谊的小船说翻就翻&#xff1f;" 不&#xff01;对小蓝和小桥来说&#xff0c;五子棋不仅是棋盘上的较量&#xff0c;更是心与心之间的沟通。这两位挚友秉承着"友谊第…...

YOLOv8改进,YOLOv8检测头融合DynamicHead,并添加小目标检测层(四头检测),适合目标检测、分割等,全网独发

摘要 作者提出一种新的检测头,称为“动态头”,旨在将尺度感知、空间感知和任务感知统一在一起。如果我们将骨干网络的输出(即检测头的输入)视为一个三维张量,其维度为级别 空间 通道,这样的统一检测头可以看作是一个注意力学习问题,直观的解决方案是对该张量进行全自…...

【16届蓝桥杯寒假刷题营】第2期DAY5

5.变变数组 - 蓝桥云课 给定一个长度为 n 的整数数组 A&#xff0c;A 中第 i 个元素为 Ai​&#xff08;1≤i≤n&#xff09;&#xff0c;你只能在 A 中选择一个元素 a&#xff0c;将 A 中所有数值等于 a 的元素变为 a2&#xff0c;请问变化后 A 中所有元素和的最大为多少。 …...

什么是心跳

心跳&#xff08;Heartbeat&#xff09; 是在计算机网络、分布式系统和嵌入式系统中常见的一种机制&#xff0c;用于检测系统或组件的可用性、存活状态以及维持连接。 1. 心跳的作用 ✅ 检测存活状态 确保服务器、客户端、微服务或设备仍然在线。适用于 分布式系统、集群、高…...

有限元分析学习——Anasys Workbanch第一阶段笔记梳理

第一阶段笔记主要源自于哔哩哔哩《ANSYS-workbench 有限元分析应用基础教程》 张晔 主要内容导图&#xff1a; 笔记导航如下&#xff1a; Anasys Workbanch第一阶段笔记(1)基本信息与结果解读_有限元分析变形比例-CSDN博客 Anasys Workbanch第一阶段笔记(2)网格单元与应力奇…...

目标跟踪之sort算法(3)

这里写目录标题 1 流程1 预处理2 跟踪 2 代码 参考&#xff1a;sort代码 https://github.com/abewley/sort 1 流程 1 预处理 1.1 获取离线检测数据。1.2 实例化跟踪器。2 跟踪 2.1 轨迹处理。根据上一帧的轨迹预测当前帧的轨迹&#xff0c;剔除到当前轨迹中为空的轨迹得到当前…...

uniapp 地图添加,删除,编辑标记,在地图中根据屏幕范围中呈现标记

前言 小程序实现新功能&#xff0c;在地图中选取位置添加标记&#xff0c;并在地图中呈现添加的标记&#xff0c;&#xff08;呈现的是根据当前屏幕范围内的标记&#xff09;&#xff0c;并对标记进行分享&#xff0c;删除&#xff0c;编辑&#xff0c;导航&#xff0c;并从分…...

第 5 章:声音与音乐系统

5.1 声音效果的应用 在游戏中&#xff0c;声音效果是增强游戏沉浸感和趣味性的重要元素。Pygame 提供了强大的音频处理功能&#xff0c;使得添加各种声音效果变得相对简单。声音效果可以包括角色的动作音效&#xff0c;如跳跃、攻击、受伤时的声音&#xff1b;环境音效&#x…...

SOME/IP服务接口

本系列文章将分享我在学习 SOME/IP 过程中积累的一些感悟&#xff0c;并结合 SOME/IP 的理论知识进行讲解。主要内容是对相关知识的梳理&#xff0c;并结合实际代码展示 SOME/IP 的使用&#xff0c;旨在自我复习并与大家交流。文中引用了一些例图&#xff0c;但由于未能找到原作…...