Android 获取屏幕物理尺寸
注:编译 sdk 需要使用 30
因为引入了 WindowMetrics、uild.VERSION_CODES.R 新 sdk 才存在的类和属性
某些场景处理 view ,对 view 显示的位置要求比较精确,通常我们使用context.getResources().getDisplayMetrics().widthPixels 获取到的宽、高是不包含状态栏等高度,在计算坐标、偏移量时可能就不精确了,那么就需要获取设备的物理尺寸——包含状态栏高度等不显示区域。
import android.graphics.Point;
import android.graphics.Rect;
import android.util.Pair;
import android.util.Size;
import android.view.WindowManager;
import android.view.WindowMetrics;import androidx.annotation.RequiresApi;@RequiresApi(api = Build.VERSION_CODES.R)
private static Size getPhysicalScreenSize30(Context context) {WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);if (windowManager != null) {WindowMetrics windowMetrics = windowManager.getCurrentWindowMetrics();Rect bounds = windowMetrics.getBounds();return new Size(bounds.width(), bounds.height());}return new Size(-1,-1);
}@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private static Size getPhysicalScreenSize29(Context context) {WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);if (windowManager != null) {Point size = new Point();windowManager.getDefaultDisplay().getRealSize(size);return new Size(size.x, size.y);}return new Size(-1,-1);
}public static Pair<Integer, Integer> getPhysicalScreenSize(Context context) {int w = -1, h = -1;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {Size size = getPhysicalScreenSize30(context);w = size.getWidth();h = size.getHeight();} else {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {Size size = getPhysicalScreenSize29(context);w = size.getWidth();h = size.getHeight();}}if (w != -1 && h != -1) {return new Pair<>(w, h);}//最不济的情况就返回非物理尺寸吧w = context.getResources().getDisplayMetrics().widthPixels;h = context.getResources().getDisplayMetrics().heightPixels;return new Pair<>(w, h);
}
相关文章:
Android 获取屏幕物理尺寸
注:编译 sdk 需要使用 30 因为引入了 WindowMetrics、uild.VERSION_CODES.R 新 sdk 才存在的类和属性 某些场景处理 view ,对 view 显示的位置要求比较精确,通常我们使用context.getResources().getDisplayMetrics().widthPixels 获取到的宽、…...
C缺陷与陷阱 — 8 编译与链接
目录 1 程序的编译过程 2 动态链接的优缺点 2.1 动态链接的优点 2.2 动态链接的缺点 2.3 只使用动态链接 3 函数库链接的5个特殊秘密 4 警惕Interpositioning 5 产生链接器报告文件 1 程序的编译过程 程序的编译过程是将源代码转换成计算机可以执行的机器代码的过程。…...
知识分享第三十天-力扣343.(整数拆分)
343 整数拆分 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: 10 输出: 36 解释: 10 3 3 4, 3 3 4 36。 说明: 你可…...
Springboot 整合DL4J 打造智能写作助手(文本生成)
项目准备 环境要求: Java 1.8或以上 Maven 或 Gradle(用于项目管理) Spring Boot框架 DL4J库(DeepLearning4J) 创建 Spring Boot 项目 使用 Spring Initializr 来生成一个新的 Spring Boot 项目。选择合适的依赖,例如…...
SPL06 基于stm32F103 HAL库驱动(软件模拟IIC)
talk is cheap, show you my code SPL06.c #include "SPL06.h"//*************全局变量*************// Factor_List* b_list; //存储过采样率对应的系数KP,KT COEF_ValueStruct Coefficient { 0 }; //存储校准系数…...
【C#】List求并集、交集、差集
值类型List List<int> intList1 new List<int>() { 1, 2, 3 };List<int> intList2 new List<int>() { 3, 4, 5 };var result intList1.Union(intList2);Console.WriteLine($"并 {string.Join(,,result)}");result intList1.Intersect(in…...
YOLOv8目标检测——详细记录使用ONNX Runtime进行推理部署C++/Python实现
概述 在之前博客中有介绍YOLOv8从环境安装到训练的完整过程,本节主要介绍ONNX Runtime的原理以及使用其进行推理加速,使用Python、C两种编程语言来实现。 https://blog.csdn.net/MariLN/article/details/143924548?spm1001.2014.3001.5501 1. ONNX Ru…...
mfc140u.dll是什么文件?如何解决mfc140u.dll丢失的相关问题
遇到“mfc140u.dll文件丢失”的错误通常影响应用程序的运行,这个问题主要出现在使用Microsoft Visual C环境开发的软件中。mfc140u.dll是一个重要的系统文件,如果它丢失或损坏,会导致相关程序无法启动。本文将简要介绍几种快速有效的方法来恢…...
Redis篇-19--运维篇1-主从复制(主从复制,读写分离,配置实现,实战案例)
1、概述 Redis的主从复制(Master-Slave Replication)是一种数据冗余机制,它允许将一台Redis服务器的数据复制到其他Redis服务器。在主从复制中,有一台主服务器(Master)和一个或多个从服务器(Sl…...
【Elasticsearch入门到落地】4、Elasticsearch的安装
接上篇《3、es与mysql的概念对比》 上一篇我们学习了Elasticsearch与Mysql的概念与区别。本篇我们来进行Elasticsearch的环境准备及软件安装。 一、环境准备 如果我们没有自己的Linux服务器,且现在正在使用的是Windows操作系统的电脑,那么首先我们需要安…...
计算无人机俯拍图像的地面采样距离(GSD)矩阵
引言 在无人机遥感、测绘和精细农业等领域,地面采样距离(Ground Sampling Distance,简称 GSD)是一个非常重要的指标。GSD 是指图像中每个像素在地面上实际代表的物理距离,通常以米或厘米为单位。GSD 决定了图像的空间…...
牛客网 SQL37查找多列排序
SQL37查找多列排序 select device_id,gpa,age from user_profile order by gpa asc,age asc#select [字段1,字段2] from [表名] order by [字段1] [升序(asc)/降序(desc)],[字段2] [升序(asc)/降序(desc)] #select:查询 #order by 排序 每日问题 如何处理对象的状…...
el-tabs标签过多
tab-position:top情况 .el-tabs__nav-wrap{overflow-x: auto ;width: 86% ;margin-left: 10px ; } 效果: tab-position:left情况 .el-tabs__nav-wrap{overflow-x: auto ;height: 高度 ;margin-top: 10px ; } 效果: 注意&…...
如何制作搞笑配音视频?操作方法
在数字娱乐盛行的今天,搞笑配音视频凭借其独特的幽默感和创意,在网络上赢得了大量观众的喜爱。如果你也想尝试制作一部让人捧腹的搞笑配音视频,那么请跟随以下步骤,从撰写搞笑文案到视频配音剪辑,一步步打造你的作品。…...
[Unity]Unity跨平台开发之针对Android开发
用户手册的这一部分包含Android平台关于输入(input)、资产管理(asset management)和调试(debugging)等相关主题的开发信息。 Android移动脚本编写 注意:安卓可以在C#中使用UNITY_ANDROID来进行…...
ELK部署
背景 很多公司还是在单体项目中苦苦挣扎,没有必要上elk系统,大家都懂的一个原则系统的技术栈越多系统越复杂,维护起来也越麻烦,在没有大流量高并发的情况下我们就用单体服务挺舒服。我们行业的特殊性做的都是BTB的项目࿰…...
ELK系列-(四)轻量级的日志收集助手-Beat家族
一、前文回顾 ELK系列-(一)Docker部署ELK核心组件 ELK系列-(二)LogStash数据处理的瑞士军刀 ELK系列-(三)Kibana 数据可视化的艺术家 关于部署的整体架构欢迎大家回到前面的文章观看,此处&a…...
NodeJs-包管理工具
包英文单词是 package ,代表了一组特定功能的源码集合 管理包的应用软件,可以对包进行 下载安装 , 更新 , 删除 , 上传 等操作 借助包管理工具,可以快速开发项目,提升开发效率 前端常用的包管理…...
AWR microwave office 仿真学习(二)使用多层结构天线/超表面的S参数确定层间距
引言 如果大家有看过一些多层天线或超表面的论文,有两种比较常用的分析方法,等效电路法和传输线分析法,这两种方法都是三维结构的电磁问题转换为二维/集总的电路问题。本文就介绍根据这种思想进行多层结构优化的一种方法:在AWR软件中根据单层结构的S参数,确定最佳层间距。…...
【zlm】 webrtc源码讲解三(总结)
目录 setsdp onwrite 编辑 play 参考 setsdp onwrite play 参考 【zlm】 webrtc源码讲解_zlm webrtc-CSDN博客 【zlm】 webrtc源码讲解(二)_webrtc 源码-CSDN博客...
ROFL-Player:英雄联盟回放文件解析与管理的技术实践
ROFL-Player:英雄联盟回放文件解析与管理的技术实践 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player 在电子竞技数据分析领域…...
Bash脚本AI助手:智能生成命令行,提升运维自动化效率
1. 项目概述:当Bash脚本遇见AI,自动化运维的智能进化如果你是一名运维工程师、系统管理员,或者任何需要与Linux命令行打交道的开发者,那么“Bash脚本”一定是你工具箱里的常客。从批量文件处理、定时任务调度到复杂的部署流程&…...
开源AI智能体QClaw-Mimic:用个人数据微调大模型打造专属数字分身
1. 项目概述:一个能“模仿”你的开源智能体最近在GitHub上看到一个挺有意思的项目,叫QClaw-Mimic。光看名字,Mimic(模仿)这个词就挺抓人的。点进去一看,果然,这是一个旨在通过分析你的历史对话数…...
除了 Docker 还能用什么?一文看懂容器技术的“四大门派”
除了 Docker 还能用什么?一文看懂容器技术的“四大门派” 在云原生时代,Docker 几乎成了容器的代名词。但实际上,容器技术是一片茂密的森林,除了 Docker,还有许多针对特定痛点(如安全、性能、隔离性&#x…...
手把手教你用XDS110给TI开发板供电与调试(附CCS配置避坑指南)
手把手教你用XDS110给TI开发板供电与调试(附CCS配置避坑指南) 对于刚接触TI嵌入式开发的工程师或学生来说,XDS110调试探针是一个经济实惠且功能强大的入门选择。它不仅支持JTAG和SWD调试,还能为目标板提供电源,并集成了…...
Android AI助手开发实战:基于MVVM与OpenAI API的AnywhereGPT项目解析
1. 项目概述与核心价值最近在折腾移动端AI应用,发现一个挺有意思的开源项目,叫AnywhereGPT-Android。简单来说,它就是一个让你能在Android手机上,通过调用OpenAI的API(比如GPT-3.5/4)或者本地部署的模型&am…...
TypeScript代码质量扫描利器tscanner:超越tsc的类型安全检查实践
1. 项目概述:一个被低估的TypeScript代码质量扫描利器最近在重构一个遗留的TypeScript项目,代码库已经膨胀到几十万行,各种any满天飞,类型定义混乱不堪,手动审查根本无从下手。就在我头疼的时候,同事推荐了…...
NAT 类型详解:四种 NAT 的数据流与原理解析
NAT 类型详解:四种 NAT 的数据流与原理解析摘要:NAT(Network Address Translation)是 P2P 通信中绕不开的关卡。不同的 NAT 类型决定了内网设备能否被外部直接访问,直接影响 WebRTC 等 P2P 技术的穿透成功率。本文通过…...
前台测试想转后台优化?这4个条件缺一不可,否则别折腾
很多做前台测试的兄弟都问过同一个问题:我能不能转后台?今天这篇文章,一次性把后台工程师的准入清单说清楚。一、基础条件:5条缺一不可年龄20-50岁太小的缺经验,太大的学新东西慢,这个区间刚刚好。有网优基…...
Mochi语言解析:轻量级编程语言的设计原理与应用实践
1. 项目概述:一个为现代应用而生的轻量级编程语言最近在社区里看到不少朋友在讨论mochilang/mochi这个项目,作为一个对编程语言设计和运行时实现有浓厚兴趣的老码农,我立刻就被吸引住了。简单来说,Mochi 是一个新兴的、以轻量级和…...
