第二百二七回

2023-12-26 01:04
文章标签 二七 第二百

本文主要是介绍第二百二七回,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 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.chinasem.cn/article/537593

相关文章

ARM/Linux嵌入式面经(二七):韶音

一面 7月8号 hr面 hr面问的都是基本情况,会浅浅的问些项目 1、自我介绍 2、高考排名是多少? 3、是保研吗?保研时有拿到其他学校的offer吗 4、实验室一共多少人?博士占比是多少? 4、意向工作城市?为什么选择深圳? 5、介绍一下第一个项目,有没有遇到过什么问题,怎么解决的 6、有了解过韶音吗,双百计划了不了解? 有一些问题忘记了,自然回答就好,就聊天 二面

第二百零九节 Java格式 - Java数字格式类

Java格式 - Java数字格式类 以下两个类可用于格式化和解析数字: java.text.NumberFormatjava.text.DecimalFormat NumberFormat 类可以格式化一个数字特定地区的预定义格式。 DecimalFormat 类可以格式化数字以特定区域设置的自定义格式。 NumberFormat类的 getXXXInstance()方法返回格式化

第二百零四节 Java正则表达式教程 - Java正则表达式量词

Java正则表达式教程 - Java正则表达式量词 我们可以指定正则表达式中的字符的次数可以匹配字符序列。 为了使用正则表达式表达一个数字或更多的模式,我们可以使用量词。 下表列出了量词及其含义。 量词含义*零次或更多次+一次或多次?一次或根本不{m}正好m次{m,}至少m次{m,n}至少m,但不超过n次 量词必须遵循字符或字符类。 例子 import java.util.reg

一起Talk Android吧(第二百三十七回:Android中的Intent)

各位看官们大家好,上一回中咱们说的是Android中四大组件的例子,这一回咱们说的例子是Intent。闲话休提,言归正转。让我们一起Talk Android吧! 看官们,我们在本章回中将介绍Intent,它也是常用的知识,四大组件中有三大组件都使用它,比如打开Activity,绑定服务,发送广播。我们在代码中都看到过Intent的身影。 Intent可以显式和隐式两种; 显式Intent中包含

一起Talk Android吧(第二百三十六回:Android中的四大组件概述)

各位看官们大家好,上一回中咱们说的是Android中数据存储大结局的例子,这一回咱们说的例子是四大组件。闲话休提,言归正转。让我们一起Talk Android吧! 看官们,我们在这一回中介绍一下Android中的四大组件,它们是 ActivityServiceBroadcastContentProvider。 其实这些内容我们都介绍过,接下来我们一起回顾一下这些知识. Activity是程

一起Talk Android吧(第二百三十四回:Android中的数据存储之ContentProvider二)

各位看官们大家好,上一回中咱们说的是Android中数据存储之ContentProvider的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起Talk Android吧! 看官们,我们在上一回中介绍了如何通过ContentProvider读取联系人模块中的数据,下面是完整的代码,请大家参考: package com.example.talk8.blogappall;import a

一起Talk Android吧(第二百三十二回:Android中的数据存储之ContentProvider概述)

各位看官们大家好,上一回中咱们说的是Android中数据存储之数据库的例子,这一回咱们说的例子是ContentProvider。闲话休提,言归正转。让我们一起Talk Android吧! 看官们,contentProvider也叫内容提供器,它主要用来在应用程序之间共享数据,因此,我们把它当作一种数据存储方式。它通常有两种使用场景: 使用它访问其它应用中的数据;定义它并且提供接口让其它程序来访

第二百零五回

文章目录 1. 概念介绍2. 实现方法2.1 文字信息2.2 红色边框 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何实现密码输入框"相关的内容,本章回中将介绍如何在在输入框中提示错误.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回介绍的内容还与输入框有关,输入框仍然使用TextField组件实现。我们主要介绍如何在输入框中提示

第二百零四回

文章目录 1. 概念介绍2. 实现方法2.1 使用Steam实现2.2 使用Timer实现 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何实现每隔一段时间执行某项目任务"相关的内容,本章回中将介绍如何实现倒计时功能.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 倒计时功能估计大家都熟悉,经常用在一些节目开始或者开奖活动中。程序中也会用到倒计时

第二百九十八回

文章目录 1. 概念介绍2. 方法与原理2.1 实现方法2.2 实现原理 3. 示例代码4. 内容总结 我们在上一章回中介绍了"再谈showMenu的用法",本章回中将介绍如何实现每隔一段时间执行某项任务.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 在实际项目中会有定时执行任务的需求,比如每隔1秒去发送网络心跳包,对于这样的需求,可以通过Stream