第二百二七回

文章目录

  • 1. 概念介绍
  • 2. 实现方法
  • 3. 代码与效果
  • 3.1 示例代码
  • 3.1 示例代码
  • 4. 内容总结

我们在上一章回中介绍了"滚动布局的使用实例"相关的内容,本章回中将介绍自定义百分比布局.闲话休提,让我们一起Talk Flutter吧。

1. 概念介绍

我们在本章回中介绍的百分比布局主要指按照一定的百分比来控制组件在屏幕垂直方向的位置,比如第一行内容在屏幕五分之一位置,第二行内容在屏幕五分之二位置。这
种布局在项目中使用比较多,因为手机的屏幕大小不同,我们需要程序适配不同尺寸的屏幕。所以按照百分比来划分布局可以适配不同尺寸的屏幕。这个思路来源于我在
Android原生开发中的约束布局,在该布局内使用guideLine来划分不同的行,其它组件的位置通过guildLine来约束,而guildLine本身是可以按照屏幕百分比来
确定位置的,这相当于间接地让以guildLine为约束的组件按照百分比来确定位置。

2. 实现方法

介绍完百分比布局的概念后,我们介绍具体的实现方法:

  • 获取当前手机屏幕的高度,然后定义不同的行所在的位置;
  • 给不同行的位置赋值,具体的值为屏幕高度的百分比;
  • 创建一个Stack组件,它相当于屏幕的背景或者容器;
  • 在Stack组件中添加其它组件,这些组件就是屏幕上显示的内容;
  • 使用Positioned组件控制其它组件的位置,这里使用的是该组件的top属性;
    该方法的核心是Stack和Positioned组件,它的核心思想:使用Stack充当屏幕,然后把它按照百分比分成不同的行,行的位置通过Positioned组件的top属性来指
    定,把其它的子组件放到Positioned组件中,相当于间接地控制了其它子组件在Stack中的位置,这些位置都是按照百分比计算出来的,进而实现了百分比布局。
    该方法主要针对的是屏幕垂直方向的布局,大家可以使用该思路在水平方向上进行百分比布局。

3. 代码与效果

3.1 示例代码

Widget build(BuildContext context) {double screenWidth = MediaQuery.of(context).size.width;double screenHeight = MediaQuery.of(context).size.height;double padding = 16;///按照比例控制组件在垂直方向上的位置double row1Height = screenHeight/8;double row2Height = screenHeight*2/8;///按照固定尺寸控制组件在垂直方向上的位置///这里的96可以自定义,80是statusBar和appBap的高度,是个经验值,可以准确获取double row3Height = screenHeight-96-80;return Scaffold(appBar: AppBar(title: const Text("Example of  ScrollView"),backgroundColor: Colors.purpleAccent,),body: Padding(padding: EdgeInsets.all(padding),child: Stack(children: [///第一行内容Positioned(top: row1Height,width: screenWidth - padding*2,height: 80,child: Container(decoration: BoxDecoration(color: Colors.blue,borderRadius: BorderRadius.circular(20),),child: const Center(child: Text("row 1",style: TextStyle(color: Colors.white,),),),),),///第二行内容: 这是一个滚动组件,滚动的区域通过Positioned指定Positioned(top: row2Height,width: screenWidth - padding*2,height: row3Height - row2Height,///这里放入上一章回中滚动布局的代码child: ScrollWidget(),),///第三行内容Positioned(top: row3Height+32,width: screenWidth-padding*2,child: Container(decoration: BoxDecoration(color: Colors.redAccent,borderRadius: BorderRadius.circular(20),),child: const Center(child: Text("row 3",style: TextStyle(color: Colors.white,),),),),),],),),);
}

上面有示例代码中通过百分比把屏幕分成了三行,每行的内容都不一样,此外,还在代码中添加了边距和圆角,主要是为了美观。此外,还可以通过固定的值指定布局的
位置,不过在实际项目中不推荐这种做法。

3.1 示例代码

编译并且运行上面的代码可以得到下面的运行效果图。图中一共三行内容,每行内容的颜色和内容不一样,第一行和第三行都是普通Text组件,第二行是上一章回中介绍
的滚动组件,它里面包含多个内容,这些内容是可以滚动的,它们都是ListView的成员。

4. 内容总结

最后,我们对本章回的内容做一个全面的总结:

  • 页面中组件的位置可以通过屏幕百分比来指定,也可以通过固定数值来指定;
  • 实现百分比布局的核心是Stack组件和Positioned组件;
  • Stack组件相当于整个屏幕,Positioned组件主要有来控制子组件在屏幕中的位置;
  • 在实际项目中推荐大家使用百分比布局,这样可以让页面适配不同大小的屏幕;
    看官们,与"自定义百分比布局"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/577401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Go语言中实现HTTP中间件

在Web开发中,中间件是一种非常流行的设计模式,它可以用于处理请求、拦截请求并对其进行处理或转换。而在Go语言中,实现HTTP中间件就像给自己的HTTP服务器穿上了一层“魔法外衣”,让它变得更加灵活、可配置和可扩展。下面&#xff…

有可以平替SSL证书的数字证书吗

SSL证书和数字证书并不是完全等价的概念。SSL证书是一种数字证书的一种应用,用于在网络中加密和身份验证。数字证书是一种用于加密通信和验证身份的技术,SSL证书就是数字证书的一种特定形式。 除了SSL证书之外,还有其他类型的数字证书&#…

QT trimmed和simplified

trimmed:去除了字符串开头前和结尾后的空白; simplified:去除了字符串开头前和结尾后的空白,以及中间内部的空白字符也去掉(\t,\n,\v,\f,\r和 ) 代码: QString str " 1 2 3 4 5 …

Apache Commons BeanUtils: JavaBean操作的艺术

第1部分:Apache Commons BeanUtils 简介 咱们今天聊聊Apache Commons BeanUtils。这货简直就是处理JavaBean的利器,用起来又方便又快捷。不管是属性拷贝、类型转换,还是动态访问,BeanUtils都能轻松应对。 BeanUtils是啥&#xf…

043、循环神经网络

之——RNN基础 杂谈 第一个对于序列模型的网络,RNN。 正文 1.潜变量自回归模型 潜变量总结过去的信息,再和当前信息一起结合出新的信息。 2.RNN 循环神经网络将观察作为x,与前层隐变量结合得到输出 其中Whh蕴含了整个模型的时序信息&#xf…

NET中使用SQLSugar操作sqlserver数据库

目录 一、SqlSugar是什么? 二、迁移和建表 1.建立实体 2.创建上下文类 3.在Program中添加SqlSugar服务 4.在控制器中注入上下文类 三、简单实现CURD功能 总结 一、SqlSugar是什么? SqlSugar是一款老牌 .NET 开源ORM框架。 主要特点&#xff1a…

让某个页面一直处于最前面,可以屏蔽切屏检测

前言 学习通智慧树网课分屏,让某个页面一直处于最前面,可以屏蔽切屏检测。 页面一直处于最前面 前言1 安装包2 使用 1 安装包 https://download.csdn.net/download/qq_44850489/76684366 2 使用 一直下一步就可以 选择要放到前面的窗口&#xff0c…

设计模式--工厂方法模式

实验3:工厂方法模式 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解工厂方法模式的动机,掌握该模式的结构; 2、能够利用工厂方法模式解决实际问题。 [实验任务]:加密算法 目前常用…

ts相关笔记(extends、infer、Pick、Omit)

最近刷了本ts小册,对一些知识点做下笔记。 extends extends 是一个关键字,用于对类型参数做一些约束。 A extends B 意味着 A 是 B 的子类型,比如下面是成立的 ‘abc’ extends string599 extends number 看下面例子: type …

Leetcode—86.分隔链表【中等】

2023每日刷题(六十九) Leetcode—86.分隔链表 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* partition(struct ListNode* head, int x) {struct ListNode…

C语言操作符if语句好习惯 详解分析操作符(详解4)

各位少年: 前言 还记得我们上一章讲过一个比较抽象的代码,它要比较两次都是真的情况下才能打印,那么很显然这样写代码是有弊端的?哪我们C语言之父丹尼斯.里奇,先介绍一下上次拉掉了if语句的好习惯 好再分享一些操作符…

单挑力扣(LeetCode)SQL题:1303. 求团队人数

相信很多学习SQL的小伙伴都面临这样的困境,学习完书本上的SQL基础知识后,一方面想测试下自己的水平;另一方面想进一步提升,却不知道方法。 其实,对于技能型知识,我的观点一贯都是:多练习、多实…

【基础篇】一、认识JVM

文章目录 1、虚拟机2、Java虚拟机3、JVM的整体结构4、Java代码的执行流程5、JVM的三大功能6、JVM的分类7、JVM的生命周期 1、虚拟机 虚拟机,Virtual Machine,一台虚拟的计算机,用来执行虚拟计算机指令。分为: 系统虚拟机&#x…

结构体的对齐规则

1.引入 我们在掌握了结构体的基本使⽤后。 现在我们深⼊讨论⼀个问题:计算结构体的大小。 这也是⼀个特别热门的考点: 结构体内存对齐。 2.具体分析 ⾸先我们得掌握结构体的对⻬规则: 1. 结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量…

Flutter详解及案例代码

概念 Flutter是由Google开发的开源UI框架,旨在快速构建高质量的移动应用程序。与传统的移动应用开发方式不同,Flutter使用单一代码库构建应用程序,可以同时在iOS和Android上运行。 Flutter的核心是使用Dart语言编写的,并且具有自…

前端---表单提交

1. 表单属性设置 <form>标签 表示表单标签&#xff0c;定义整体的表单区域 action属性 设置表单数据提交地址method属性 设置表单提交的方式&#xff0c;一般有“GET”方式和“POST”方式, 不区分大小写 2. 表单元素属性设置 name属性 设置表单元素的名称&#xff0c…

如何解决HTTP 404错误,这里给出详细解决办法

404错误是一个HTTP状态代码,这意味着你试图在网站上访问的页面在他们的服务器上找不到。 需要明确的是,该错误表示虽然服务器本身是可访问的,但显示该错误的特定页面是不可访问的。 个别网站经常自定义这个错误信息。所以,请记住,错误可能会以任何可以想象的方式出现,这…

网络编程--socket编程

这里写目录标题 套接字概念通信原理总结 预备知识网络字节序简介字节转换函数 IP地址转换函数为什么单独列出函数原型sockaddr结构体 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 套接字 概念 Socket本身有插座的意思&#xff0c;但他是进程之间网络通…

解决Qt“报无法定位程序输入点xxx于动态连接库“问题

今天&#xff0c;在使用QtVS2019编译工程时&#xff0c;弹出"无法定位程序输入点xxx于动态链接库"问题&#xff0c;如图(1)所示&#xff1a; 图(1) 报"无法定位程序输入点xxx于动态链接库"问题 出现这种问题的原因有很多&#xff1a; (1) 工程Release/Deb…

Android UID相关知识

一、UID/PID/GID/GIDS的含义和作用 UID : android中uid用于标识一个应用程序&#xff0c;uid在应用安装时被分配&#xff0c;并且在应用存在于手机上期间&#xff0c;都不会改变。一个应用程序只能有一个uid&#xff0c;多个应用可以使用sharedUserId 方式共享同一个uid&#…