亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Flutter應(yīng)用框架搭建實現(xiàn)屏幕適配方案詳解

 更新時間:2022年11月17日 14:01:02   作者:晨晨dyj  
移動設(shè)備多樣性,特別是Android的碎片化嚴重,存在各種各樣的分辨率,flutter跨平臺開發(fā)又需要同時支持Android和IOS,為盡可能的還原設(shè)計圖效果提升用戶的體驗,根據(jù)設(shè)計稿設(shè)計屏幕ui的時候我們需要考慮到屏幕適配的問題

原理

UI設(shè)計的時候一般會按照一個固定的尺寸進行設(shè)計,如 360 x 690 ,實際設(shè)備分辨率可能是 Google Pixel: 1080 x 1920 、Google Pixel XL: 1440 x 2560 、iPhone 12 Pro Max: 1284 x 2778 等等。開發(fā)時如果直接按照設(shè)計圖寫死數(shù)值則會出現(xiàn)最后實現(xiàn)的效果跟設(shè)計效果不一致的情況。這個時候就可以用比例的方式來進行適配。

將設(shè)計圖分為固定單位并給這個單位定義一個標(biāo)識,例如就叫 w,然后通過獲取設(shè)備分辨率,使用設(shè)備真實寬度除以設(shè)計圖寬度 ,就得到了 1w 代表的真實寬度:

1w = 設(shè)備真實寬度 / 設(shè)計圖寬度

如設(shè)計圖尺寸是 360 x 690 ,則寬度為 360w ,真實設(shè)備寬度為 1080 則 1w = 1080 / 360 = 3。

根據(jù)上面的算法,得到對應(yīng)設(shè)備的 1w 的真實寬度:

Google Pixel: 1w = 1080 / 360 = 3

Google Pixel XL: 1w = 1440 / 360 = 4

iPhone 12 Pro Max: 1w = 1284 / 360 = 3.57

按照同樣的算法,可以給高度定義一個單位為 h , 得出對應(yīng)設(shè)備的高度單位的真實值,如下:

Google Pixel: 1h = 1920 / 690 = 2.78

Google Pixel XL: 1h = 2560 / 690 = 3.71

iPhone 12 Pro Max: 1h = 2778 / 690 = 4.03

得到換算以后 w、h 的真實值以后,開發(fā)過程中就可以使用其來設(shè)置 UI 控件的高、寬、間距等,使其最終呈現(xiàn)的效果無限接近設(shè)計圖的效果。

開發(fā)過程中一般采用寬度來進行適配,控件高度要么自適應(yīng),要么也設(shè)置寬度的單位,然后整體高度根據(jù)內(nèi)容自適應(yīng)。但是如果有特殊需求也可以使用高度來進行適配,比如需求要求是 banner 占屏幕的 1/4 ,或者要求內(nèi)容剛好一屏顯示,這個時候設(shè)置控件的高度時就可以采用高度單位來進行適配。

基于上面的算法,在項目中就可以實現(xiàn)對應(yīng)的適配方案了,但本著不重復(fù)造輪子的思想,項目開發(fā)中可以直接使用 flutter_screenutil 這個適配庫。

推薦方法

直接使用ScreenUtil.init方法,傳入屏幕尺寸、設(shè)計圖尺寸和屏幕方向可以對flutter_screenutil進行初始化,代碼如下:

ScreenUtil.init(
  BoxConstraints(
    maxWidth: MediaQuery.of(context).size.width,  //屏幕寬度
    maxHeight: MediaQuery.of(context).size.height, //屏幕高度
  ),
  designSize: const Size(360, 690), // 設(shè)計圖尺寸
  orientation: Orientation.portrait); // 屏幕方向
)

使用這種方式只需要在使用flutter_screenutil前進行初始化即可,一般放在根路由即第一個頁面加載的時候進行初始化。

注意:ScreenUtil.init不能夠在MyApp中進行初始化,此時還沒有加載MaterialApp無法使用MediaQuery.of(context)獲取到屏幕的寬高。

初始化以后就可以使用flutter_screenutil提供的方法獲取到適配后的數(shù)值進行使用了。

可以通過如下的api獲取寬高以及字體的適配數(shù)值。

ScreenUtil().setWidth(540)  //根據(jù)屏幕寬度適配尺寸
ScreenUtil().setHeight(200) //根據(jù)屏幕高度適配尺寸(一般根據(jù)寬度適配即可)
ScreenUtil().radius(200)    //根據(jù)寬度或高度中的較小者進行調(diào)整
ScreenUtil().setSp(24)      //字體大小適配

傳入的參數(shù)即為設(shè)計圖上的大小。在實際使用中的示例如下:

Container(
  width: ScreenUtil().setWidth(200),
  height: ScreenUtil().setHeight(540),
  child: Text("Hello", style: TextStyle(fontSize: ScreenUtil().setSp(24)),),
);

flutter_screenutil更簡單的寫法,使用dart擴展的num類型:

上面的每一個方法和下面的相對應(yīng):

ScreenUtil().setWidth(540)  =>  540.h
ScreenUtil().setHeight(200) =>  200.w
ScreenUtil().radius(200)    =>  200.r
ScreenUtil().setSp(24)      =>  24.sp

相應(yīng)的修改之后的使用示例:

Container(
width: 200.w,
height: 540.h,
child: Text("Hello", style: TextStyle(fontSize: 24.sp),),
);

注意:1.w!=1.h除非屏幕的分辨率比例和設(shè)計圖的比例一致,所以要設(shè)置正方形,切記使用相同的單位,如果設(shè)置相同的w和h,可能是長方形。

除了上面的4鐘擴展屬性以外,還提供了sm以及sw和sh

sm:取數(shù)值本身和sp的值較小的值,如:12.sm則取12和12.sp的值進行比較,取較小的值。

sw:screen width的縮寫,表示的是屏幕寬度,作用是按照屏幕寬度比例返回值。如0.2sw則返回屏幕寬度的20%,1.sw則是整個屏幕寬度

sh:screen height的縮寫,即屏幕高度,作用于sw類似,返回指定比例的屏幕高度值。如1.sh為整個屏幕的高度。

使用sp作為字體單位,默認是會隨著系統(tǒng)字體縮放進行變化的,如果不想讓字體隨著系統(tǒng)的縮放進行變化,可以設(shè)置textScaleFactor為1.0來實現(xiàn)。項目中可對MaterialApp進行全局設(shè)置,或者對Text進行單獨的設(shè)置。

全局設(shè)置:

MaterialApp(
        debugShowCheckedModeBanner: false,
        title: 'Flutter_ScreenUtil',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        builder: (context, widget) {
          return MediaQuery(
            ///設(shè)置文字大小不隨系統(tǒng)設(shè)置改變
            data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
            child: widget,
          );
        },
        home: HomePage(title: 'FlutterScreenUtil Demo'),
      ),

單獨設(shè)置:

Text("text", textScaleFactor: 1.0)

到此這篇關(guān)于Flutter應(yīng)用框架搭建實現(xiàn)屏幕適配方案詳解的文章就介紹到這了,更多相關(guān)Flutter屏幕適配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android 8.0的緩存大小和緩存清理接口方法

    Android 8.0的緩存大小和緩存清理接口方法

    今天小編就為大家分享一篇Android 8.0的緩存大小和緩存清理接口方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Android開發(fā)實現(xiàn)的簡單媒體播放器功能示例

    Android開發(fā)實現(xiàn)的簡單媒體播放器功能示例

    這篇文章主要介紹了Android開發(fā)實現(xiàn)的簡單媒體播放器功能,結(jié)合實例形式分析了Android基于surfaceview實現(xiàn)多媒體視頻及音頻播放的相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • 解決Android Studio電腦不支持HAXM的問題

    解決Android Studio電腦不支持HAXM的問題

    這篇文章主要介紹了Android Studio電腦不支持HAXM的問題及解決方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-03-03
  • Android實現(xiàn)Activity之間通信的方法

    Android實現(xiàn)Activity之間通信的方法

    這篇文章主要介紹了Android實現(xiàn)Activity之間通信的方法,涉及Android中Activity實現(xiàn)數(shù)據(jù)的發(fā)送及接收相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • Android實現(xiàn)滑動標(biāo)簽頁

    Android實現(xiàn)滑動標(biāo)簽頁

    這篇文章主要為大家詳細介紹了Android實現(xiàn)滑動標(biāo)簽頁,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Android自定義Dialog內(nèi)部透明、外部遮罩效果

    Android自定義Dialog內(nèi)部透明、外部遮罩效果

    這篇文章主要為大家詳細介紹了Android自定義Dialog內(nèi)部透明、外部遮罩效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Flutter之自定義Dialog實現(xiàn)版本更新彈窗功能的實現(xiàn)

    Flutter之自定義Dialog實現(xiàn)版本更新彈窗功能的實現(xiàn)

    這篇文章主要介紹了Flutter之自定義Dialog實現(xiàn)版本更新彈窗功能的實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Android實現(xiàn)秒表功能

    Android實現(xiàn)秒表功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)簡易秒表功能,具備啟停功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 自定義Toast工具類ToastUtil防止多次點擊時Toast不消失的方法

    自定義Toast工具類ToastUtil防止多次點擊時Toast不消失的方法

    下面小編就為大家?guī)硪黄远xToast工具類ToastUtil防止多次點擊時Toast不消失的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Android 密碼 顯示與隱藏功能實例

    Android 密碼 顯示與隱藏功能實例

    這篇文章主要介紹了Android 密碼 顯示與隱藏功能實例,需要的朋友可以參考下
    2017-06-06

最新評論