Flutter 核心技术与实战
陈航
前美团点评高级技术专家
42432 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
Flutter 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

33 | 如何适配不同分辨率的手机屏幕?

使用Row控件包装列表与详情
判断设备屏幕宽度
通过独立区块快速复用视觉功能
在平板电脑和横屏模式上实现更好的视觉平衡效果
划分屏幕空间为多个窗格
使用MediaQueryData获取设备方向
根据设备方向刷新界面
OrientationBuilder的使用
屏幕宽高配置的变化
平板电脑和超大屏手机的普及
页面由控件组成
实现页面A仅支持竖屏,页面B同时支持竖屏和横屏
setPreferredOrientations方法的全局生效
写出更加健壮的布局代码
观察UI样式和功能是否异常
重点关注屏幕碎片化
兼容碎片化可能带来的潜在问题
多窗格布局的方式
提供不同的布局方式
区块复用减少编写独立布局的工作
多窗格布局
屏幕方向改变时的布局调整
不同尺寸、不同旋转方向的手机
思考题
应用开发中的注意事项
保证产品功能正常
Flutter中的屏幕适配
适配平板电脑
适配屏幕旋转
屏幕适配问题
总结
适配不同分辨率的手机屏幕

该思维导图由 AI 生成,仅供参考

你好,我是陈航。
在上一篇文章中,我与你分享了在 Flutter 中实现国际化的基本原理。与原生 Android 和 iOS 只需为国际化资源提供不同的目录,就可以在运行时自动根据语言和地区进行适配不同,Flutter 的国际化是完全在代码中实现的。
即通过代码声明的方式,将应用中所有需要翻译的文案都声明为 LocalizationsDelegate 的属性,然后针对不同的语言和地区进行手动翻译适配,最后在初始化应用程序时,将这个代理设置为国际化的翻译回调。而为了简化这个过程,也为了将国际化资源与代码实现分离,我们通常会使用 arb 文件存储不同语言地区的映射关系,并通过 Flutter i18n 插件来实现代码的自动生成。
可以说,国际化为全世界的用户提供了统一而标准的体验。那么,为不同尺寸、不同旋转方向的手机提供统一而标准的体验,就是屏幕适配需要解决的问题了。
在移动应用的世界中,页面是由控件组成的。如果我们支持的设备只有普通手机,可以确保同一个页面、同一个控件,在不同的手机屏幕上的显示效果是基本一致的。但,随着平板电脑和类平板电脑等超大屏手机越来越普及,很多原本只在普通手机上运行的应用也逐渐跑在了平板上。
但,由于平板电脑的屏幕非常大,展示适配普通手机的界面和控件时,可能会出现 UI 异常的情况。比如,对于新闻类手机应用来说,通常会有新闻列表和新闻详情两个页面,如果我们把这两个页面原封不动地搬到平板电脑上,就会出现控件被拉伸、文字过小过密、图片清晰度不够、屏幕空间被浪费的异常体验。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Flutter中实现多窗格布局以适配不同分辨率的手机屏幕是一项重要的技术挑战。本文通过讨论国际化实现原理和屏幕适配问题,为读者提供了详细指导和实践方法。作者强调了通过代码声明的方式实现国际化资源与代码分离,并介绍了使用arb文件和Flutter i18n插件简化国际化资源管理。针对不同尺寸和旋转方向的手机屏幕,作者提出了多个布局方案,包括使用OrientationBuilder控件感知屏幕旋转并加载不同的布局方式,以及通过MediaQueryData提供的orientation方法来根据设备的旋转方向设置组件的初始化行为。此外,文章还介绍了如何通过SystemChrome提供的setPreferredOrientations方法固定视图的布局方向。通过实际代码演示和技术原理解释,读者可以了解如何在Flutter应用中实现多窗格布局以适配不同分辨率的手机屏幕。文章还提到了在应用开发中需要兼容碎片化可能带来的潜在问题,以确保良好的用户体验。整体而言,本文为读者提供了解决Flutter屏幕适配问题的全面指南。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Flutter 核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(12)

  • 最新
  • 精选
  • Miracle_
    只讲横竖屏切配吗,感觉最重要的是不同尺寸手机的同一组件设置宽高,如何根据ui图给的尺寸实现高度一致性啊。

    作者回复: 其实这块内容我觉得反而比较简单:以iPhone 6切图为基准,算出当前设备的缩放系数,在布局的时候乘一下就行了

    2019-09-12
    11
  • 只是个昵称
    不知道在Flutter如何实现类似于今日头条在Android上的屏幕适配规则? 就是将设计图的宽度设置为基准宽度,控件的大小直接写设计图上的大小,然后通过框架自动计算屏幕实际宽度进行等比缩放?

    作者回复: 你看你自己就已经把解决方案都给出了

    2019-12-12
    2
    2
  • httvc
    ios,Android 一般适配用几套尺寸图才够。

    作者回复: 要求没那么精细的话,一般一套就可以了:2.0x(xhdpi)

    2019-09-12
    2
    1
  • Ethan
    平时写的Container(width;20) 这个20类似android中的dp吗?

    作者回复: 对

    2019-12-03
  • Geek_keyi
    A页面设置固定竖屏,B页面采用statefulwiget在initState的时候设置横竖屏,dispose的时候设置成竖屏

    作者回复: 大体思路对

    2019-09-26
  • 汪帅
    我想问一下怎么显示Window啊?好像现在都是用的activity

    作者回复: 给Window添个FlutterView就可以了

    2019-09-12
    2
  • 石学谦
    关于不同尺寸设备的适配,目前大多使用flutter_screenutil包,算是比较成熟的方案了
    2022-05-10
  • 浪迹江湖
    double baseUiWidthDp = 375; double widthDp = window.physicalSize.width / window.devicePixelRatio; // relative size double rsize(double size) { return (size / baseUiWidthDp) * widthDp; }
    2022-02-21
  • Sklei
    Ui给的设计图是以iPhone6为原型,看到您回复说直接算基准,能具体说下怎么做吗?比如我有一个容器,ui图是宽120px,高是36px,那我flutter中要怎么写?
    2021-01-28
  • 努力学习
    能重点讲下android的屏幕适配吗? ios很简单,可是android很多机型适配起来很奇怪,不是在布局的时候乘一下就行了.
    2021-01-26
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部