美文网首页Flutter
Flutter 全面屏适配Android 和IOS

Flutter 全面屏适配Android 和IOS

作者: 景小帮 | 来源:发表于2021-03-09 21:23 被阅读0次

    概要:

    1.全屏幕特色,及存在的问题;

    2.适配IOS全屏iPhone X;

    3.适配Android 全面屏

    总结:

    全屏幕特点,以及存在的问题

    特点:

    1、大、屏占比高、长宽比不再是比16:9 ,达到了19.5:9甚至更高;

    2、短边的像素,density的取值都是一样的,所以需要适配的是长边;

    问题:

    1.传统布局的高度不足,导致上下留黑边

    2.甚至屏幕顶部或底部的布局,如弹框,会在全面屏手机上发生位移


    页面适配

    全面屏的页面适配分两种情况:

    1.一种是对于页面已经使用了Scaffold的appBar与bottomNavigationBar的页面是不需要额外适配的,因为Scaffold框架会自动帮我们完成这些适配工作

    2.另外一种情况,在很多页面没有用到Scaffold或者Scaffold的appBar与bottomNavigationBar,那么该如何适配全面屏呢?

    对于这种情况要适配全面屏需要知道以下要点:

    适配要点:

    1.顶部NavigationBar上部预留安全区域;

    2.底部NavigationBar 底部预留安全区域;

    对于安全区域的适配有两种方案:

    方案一:采用SafeArea来包裹页面,SafeArea是Flutter中的一个用于适配全面屏的组件,它类似于RN中SafeAreaView主要是用于解决适配全面屏手机的安全区域的问题;

    优缺点:相对简单,只需要引入SafeArea,但不够灵活。

    方案二:借助MediaQuery.of(context).padding获取屏幕四周的Padding,然后根据Padding自己实现对安全区域的控制;

    优缺点:需要借助MediaQuery.of(context).padding自己实现对安全区域的控制,相对复杂些,但灵活度比较高

    具体使用方法:

    效果图:

    代码:(自己写的具体例子)

    import 'package:flutter/material.dart';

    ///

    /// 全面屏适配 ios 可以通过以下两种方式(选择其中一种)进行适配,

    /// android 以下也适用但是还需要在android 清单文件AndroidManifest.xml进行配置

    ///    <!--设置全面屏-->

    ///        <meta-data

    ///            android:name="android.max_aspect"

    ///            android:value="2.3" />

    ///

    class ScreenPageextends StatefulWidget {

    @override

      _ScreenPageStatecreateState() =>_ScreenPageState();

    }

    class _ScreenPageStateextends State {

    @override

      Widgetbuild(BuildContext context) {

    return _mediaQuery();

      }

    ///方法一,借助SafeArea 来完成

      _safeArea(){

    return MaterialApp(

    title:'全面屏适配',

          theme:ThemeData(primarySwatch: Colors.blue),

          home:Container(

    decoration:BoxDecoration(color: Colors.white),

            child:SafeArea(

    child:Column(

    mainAxisAlignment: MainAxisAlignment.spaceBetween,

                children: [

    Text("顶部"),

                  Text('底部'),

                ],

              ),

            ),

          ),

        );

      }

    ///方法二,通过MediaQuery 实现

      _mediaQuery(){

    final EdgeInsets padding = MediaQuery.of(context).padding;

        return MaterialApp(

    title:'全面屏适配',

          theme:ThemeData(primarySwatch: Colors.blue),

          home:Container(

    padding:EdgeInsets.fromLTRB(0, padding.top,0,padding.bottom),

            decoration:BoxDecoration(color: Colors.white),

            child:Column(

    mainAxisAlignment: MainAxisAlignment.spaceBetween,

                children: [

    Text("顶部"),

                  Text('底部'),

                ],

              ),

          ),

        );

      }

    }

    相关文章

      网友评论

        本文标题:Flutter 全面屏适配Android 和IOS

        本文链接:https://www.haomeiwen.com/subject/tiebqltx.html