Flutter开发(三十二):Flutter屏幕适配

当页面使用了 Scaffold 的 appBar 与 bottomNavigationBar 的页面不需要额外适配,框架里面已经自动适配了。

但很多页面写的时候不会用到 Scanffold ,这样需要手动适配。

适配不同的手机,关键是顶部和底部留有安全区域。

第一种方案:利用 SafeArea 包裹页面,简单不够灵活。

第二种方案:利用 MediaQuery.of(context).padding 获取屏幕四周 padding ,来手动适配,复杂但灵活。

第一种示例代码:

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SafeArea(
        child: Container(
          decoration: BoxDecoration(color: Colors.white),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Text("适配"),
              Text("适配"),
            ],
          ),
        ),
      ),
    );
  }
}

第二种示例代码:

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    final EdgeInsets padding = MediaQuery.of(context).padding;
    return Container(
      decoration: BoxDecoration(color: Colors.white),
      padding: EdgeInsets.fromLTRB(0, padding.top, 0, padding.bottom),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: [
          Text("适配"),
          Text("适配"),
        ],
      ),
    );
  }
}

在 Android 中适配全面屏,需要在 AndroidManifest.xml 中添加:


        <!-- 适配全面屏 -->
        <meta-data
            android:name="android.max_aspect"
            android:value="2.3" />

设置应用支持的最大比例。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值