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

第一百一十一回 如何实现屏幕适配

文章目录

  • 概念介绍
  • 实现方法
  • 示例代码

我们在上一章回中介绍了动画相关的内容,本章回中将介绍 如何适配屏幕.闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们平常使用的手机屏幕大小不同,App运行在这些大小不同的屏幕上时效果却相同,其原因就是App对不同大小的屏幕做了适配。因此我们把程序中对不同屏幕大小做处理的操作叫作适配。

适配是移动开发中必不可少的内容,在Android和IOS原生开发中需要做适配,Flutter做为跨端开发的框架,也需要做适配工作。本章回中将介绍在Flutter开发中如何去适配大小不同的屏幕。

实现方法

适配的核心思想是把相同的尺寸乘以一定的比率,使得该尺寸在不同大小的屏幕上占用的屏幕空间相同,这样给人的感觉就是这个尺寸到不同大小的屏幕上看着都一样。

我们举例子来说明:80dp在480*720大小的屏幕上占用1/6屏幕宽度。在240*320大小的屏幕上如果想占用1/6宽度,那么需要40dp.此时就需要让80dp乘以比率0.5才通满足条件。依次类推,在720*960大小的屏幕上如果想占用1/6宽度就120dp,此时就需要让80乘以比率1.5才能满足条件。

适配的思想介绍完了,那么如何计算不同屏幕的比率呢?常用做法是选一个基准值,屏幕的宽度除以基准值就是比率,在App的UI设计中通常以iPone6的屏幕尺寸为基准,它的屏幕尺寸是一个中间尺寸,有比它小的屏幕也有比它大的屏幕,选用这个尺寸大小可以方便适配其它尺寸的屏幕。

iPhone6实际宽度375 * 667,单位是pt,分辨率:750 * 1334,单位是px。为什么是屏幕宽度呢?因为手机屏幕的宽度比长度小,所以通常以宽度和高度中的最小值来适配。

因此我们可以得到比率公式:屏幕比率=屏幕分辨率宽度/750. 750是iPhone6的屏幕宽度,也可以换成UI设计稿中的尺寸,通常设计稿件中的尺寸都是像素,因此这里使用750为基准值,如果设计
稿不以这个尺寸为基准值,那么把750换成设计稿中的尺寸就可以。

示例代码

///自己设计的屏幕适配类,转换单位为dp
class XScreenUtil {static double baseSize = 0;static double physicalWidth = 0;static double physicalHeight = 0;static double realWidth = 0;static double realHeight = 0;static double dpr = 0;static double statusBarHeight = 0;///计算好的屏幕比率static double fitRatio = 0;///计算好的屏幕比率,单位为像素static double fitRatioPx = 0;///pt类似dp,ios中的屏幕单位point的缩写,px是像素缩小,在设计中使用广泛///baseSize以iPhone6为基准,默认值是750px,375dpstatic void init(BuildContext context,[baseSize=375]) {///获取屏幕物理分辨率,单位是pxphysicalWidth = View.of(context).physicalGeometry.width;physicalHeight = View.of(context).physicalGeometry.height;///获取屏幕物理分辨率,单位是ptrealWidth = MediaQuery.of(context).size.width;realHeight = MediaQuery.of(context).size.height;///屏幕的比率,比如2x,3xdpr = View.of(context).devicePixelRatio;///状态栏的高度,除以dpr才是屏幕中实际的的高度statusBarHeight = MediaQuery.of(context).padding.top / dpr;///屏幕适配时以宽度为单位进行适合,screenutil包中分宽度和高度两种适配方式,w为宽度,h为度,ex200.w,200.h.///实际项目中以宽度和高度中数值比较小的一个进行适配fitRatio = realWidth / baseSize;fitRatioPx = physicalWidth / baseSize * 2; ///iphone6的dp和px转换需要乘以2///iphone6时实际值如下:// fitRatio = realWidth / 375;// fitRatioPx = physicalWidth / 750; ///iphone6的dp和px转换需要乘以2debugPrint('PWidth: $physicalWidth, PHeight: $physicalHeight, RWidth: $realWidth, RHeight: $realHeight dpr: $dpr, top: $statusBarHeight');}///以pt为单位时使用此方法static double setFitRatio(double value) {return value * fitRatio;}///以px为单位时使用此方法static double setFitRatioPx(double value) {return value * fitRatioPx;}
}///使用自己设计的屏幕适配类来适配屏幕
Container(color: Colors.orange,width: XScreenUtil.setFitRatio(200),height: XScreenUtil.setFitRatio(200),child: const  Icon(Icons.pages),
),

上面的示例代码单独封装了一个类,通过类的静态方法可以直接使用屏幕比率,也就是代码中的setFitRatio()方法,代码中使用了MediaQuery类的size属性获取到了屏幕的宽度和长度。这个值会随着屏幕的不同而不同。需要注意的是尺寸的单位不一样,使用的方法也不一样。此外,代码中把基准值当作了类构造函数中的可选参数,如果指定了基准值,那么就使用基准值,反之使用默认值750.

看官们,关于"如何实现屏幕适配"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

相关文章:

第一百一十一回 如何实现屏幕适配

文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了动画相关的内容,本章回中将介绍 如何适配屏幕.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们平常使用的手机屏幕大小不同,App运行在这些大小不同的屏幕上时效果却相同&…...

免费实用的日记应用:Day One for Mac中文版

Day One for Mac是一款运行在Mac平台上的日记软件,你可以使用Day One for mac通过快速菜单栏条目、提醒系统和鼓舞人心的信息来编写更多内容,day one mac版还支持Dropbox同步功能,想要day one mac中文免费版的朋友赶紧来试试吧! …...

HCIP的BGP基础实验

一、实验需求 除R5的5.5.5.0环回外,其他所有的环回均可互相一访问。 二、实验步骤 1.配置ip 2.建立邻居关系 2.1 R1和R2建立直连的EBGP邻居关系 [r1]bgp 1 [r1-bgp]router-id 1.1.1.1 [r1-bgp]peer 12.1.1.2 as-number 2 要建的话双方都要建下面配置R2 [r2]bgp…...

centos7编译安装升级python3.11

编译安装python3.11 准备步骤解压编译替换升级 准备步骤 yum -y install gcc zlib zlib-devel libffi libffi-devel bzip2-devel yum -y install openssl-devel openssl11 openssl11-devel yum -y install readline-devel解压编译 wget https://www.python.org/ftp/python/3.…...

win10安装mysql和c++读取调用举例

一、下载mysql8.rar解压到C盘(也可以解压到其他位置) 在系统环境变量添加JAVA_HOMEC:\myslq8,并在path中添加%JAVA_HOME%\bin; 二、以管理员身份进入命令窗口 三、修改配置文件指定安装路径和数据库的存放路径 四、键入如下命令初始化并启动mysql服务,然后修改登录…...

计算机竞赛 opencv python 深度学习垃圾图像分类系统

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 opencv python 深度学习垃圾分类系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 这是一个较为新颖的竞…...

通讯协议037——全网独有的OPC HDA知识一之聚合(六)实际时间最小值

本文简单介绍OPC HDA规范的基本概念,更多通信资源请登录网信智汇(wangxinzhihui.com)。 本节旨在详细说明HDA聚合的要求和性能。其目的是使HDA聚合标准化,以便HDA客户端能够可靠地预测聚合计算的结果并理解其含义。如果用户需要聚合中的自定义功能&…...

【Freertos基础入门】freertos任务的优先级

文章目录 前言一、任务优先级1.Tick2.修改任务优先级 总结 前言 本系列基于stm32系列单片机来使用freerots 任务管理是实时操作系统(RTOS)的核心功能之一,它允许开发者以并发的方式组织和管理多个任务。FreeRTOS 是一个流行的开源RTOS&…...

【报错】ModuleNotFoundError: No module named ‘websocket‘

1 报错 ModuleNotFoundError: No module named websocket 2 解决方法 pip install websocket 1 报错 AttributeError: module websocket has no attribute enableTrace 2 分析 一般是由于websocket的依赖包没有安装造成的。websocket.enableTrace()方法是在websocket-cli…...

[Leetcode] [Tutorial] 多维动态规划

文章目录 62. 不同路径Solution 62. 不同路径 一个机器人位于一个 m ∗ * ∗ n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。 问总共有多少条不同的路径? 示例…...

C语言 二级指针和多级指针

什么是二级指针? 假设: int a 10;int * p &a;如上,p是指针变量,寄存的是a的地址,指向的是元素a 那么,指针变量p有地址吗?指针变量p的指针指向的是? int * * pp &p; …...

新机器到了要做的事情

文章目录 新机器到了要做的事情背景检查机器安装系统装系统步骤 总结 新机器到了要做的事情 背景 运维 一台机器到了,去看看机器情况,小编之前是开发呀,由于种种原因,阴差阳错的做了运维,本以为是应用运维&#xff0c…...

个人开发中常见单词拼错错误纠正

个人开发中常见单词拼错错误纠正 前置说明参考地址后端开发相关前端开发相关客户端开发相关大数据/云计算相关工具或软件相关 前置说明 单词太多啦, 我这里只列表我个人见得比较多的, 我没见过就不列举了. 有错误或想补充的可以提交在原仓库提交Pull Request. 😁 …...

vb+sql汽车配件管理系统设计与实现

摘 要 目前汽车配件销售企业大多数在其连锁店的管理还是手工进行,随着汽车配件行业的迅速发展,手工管理的种种弊端暴露无疑,给销售企业的发展带来了不必要的麻烦。为了规范企业内部管理,提高企业业务管理水平,更好的为客户服务,应采用计算机来管理汽车配件的进销存业务。…...

Spring Boot+Mybatis实现增删改查接口开发+测试(超详细建议收藏)

前言 Java也是测试必知必会的内容,特别是现在类似spring boot 等Java框架更是成为主流。之前实现的图书增删改查是用Python实现的,没看过的请移步:Flaskmysql 实现增删改查接口开发测试(图文教程附源码),本…...

winform 使用CommonOpenFileDialog选择文件夹或文件

选择文件夹 /// <summary> /// 选择文件夹 /// </summary> public void SelectFolder() {CommonOpenFileDialog dialog new CommonOpenFileDialog("请选择一个文件夹");dialog.IsFolderPicker true; //选择文件还是文件夹&#xff08;true:选择文件夹…...

EXPLAIN使用分析

系列文章目录 文章目录 系列文章目录一、type说明二、MySQL中使用Show Profile1.查看当前profiling配置2.在会话级别修改profiling配置3.查看profile记录4.要深入查看某条查询执行时间的分布 一、type说明 我们只需要注意一个最重要的type 的信息很明显的提现是否用到索引&…...

布局性能优化:安卓开发者不可错过的性能优化技巧

作者&#xff1a;麦客奥德彪 当我们开发Android应用时&#xff0c;布局性能优化是一个必不可少的过程。一个高效的布局能够提高用户体验&#xff0c;使应用更加流畅、响应更加迅速&#xff0c;而低效的布局则会导致应用的运行变得缓慢&#xff0c;甚至出现卡顿、崩溃等问题&…...

Python 中的机器学习简介:多项式回归

一、说明 多项式回归可以识别自变量和因变量之间的非线性关系。本文是关于回归、梯度下降和 MSE 系列文章的第三篇。前面的文章介绍了简单线性回归、回归的正态方程和多元线性回归。 二、多项式回归 多项式回归用于最适合曲线拟合的复杂数据。它可以被视为多元线性回归的子集。…...

docker 容器中执行命令出现错误: 13: Permission denied

错误 13: Permission denied [rootVM-32-11-tencentos ~]# docker exec -it kibana1 /bin/bash kibana76c20c215dcb:~$ apt-get install vi E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied) E: Unable to acquire the dpkg frontend…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...