日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 屏幕适配终结者

發布時間:2023/12/14 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 屏幕适配终结者 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


本文作者:?布蘭柯基

本文鏈接:?

https://blankj.com/2018/12/18/android-adapt-screen-killer/


文末有彩蛋

背景

之前基于頭條的適配方案寫了篇文章?Android 屏幕適配從未如斯簡單,但后續發現還是有挺多坑的,這些坑都記錄在了 GitHub?屏幕適配問題匯總及解決,基于這么多坑,最終我發現了一種更完美的適配方案,本打算一個多月前就寫這篇文章的,但由于公司事務繁忙一直抽不出空來,拖更到現在才發布,下面就讓我來分享下此法,先來吹下優點吧。

優點

1. 無侵入性

首先科普下 Android 中的一個長度單位:pt,它表示一個點,是屏幕的物理尺寸,其大小為 1 英寸的?1 / 72,也就是?72pt?等于 1 英寸(其實 Android 中還有比較少見的?in?和?mm?的長度單位)。而我本次的適配使用的單位恰好是?pt,所以對你從前使用的布局不會造成任何影響,在老項目中開發新功能你可以膽大地加入該適配方案,新項目的話更可以毫不猶豫地采用該適配,并且在關閉該關閉后,pt?效果等同于?dp?哦。

2. 靈活性高

如果你想要對某個?View?做到不同分辨率的設備下,使其尺寸在適配維度上所占比例一致的話,那么對它使用?pt?單位即可,如果你不想要這樣的效果,而是想要更大尺寸的設備顯示更多的內容,那么你可以像從前那樣寫?dp、sp?什么的即可,結合這兩點,在界面布局上你就可以游刃有余地做到你想要的效果。

3. 不會影響系統 View 和三方 View 的大小

這點其實在無侵入性中已經表現出來了,由于頭條的方案是直接修改?DisplayMetrics#density?的?dp?適配,這樣會導致系統?View?尺寸和原先不一致,比如?Dialog、Toast、 尺寸,同樣,三方?View?的大小也會和原先效果不一致,這也就是我選擇?pt?適配的原因之一。

4. 不會失效

這一點是最值得吹牛的,因為不論頭條的適配還是?AndroidAutoSize,都會存在?DisplayMetrics#density?被還原的情況,需要自己重新設置回去,最顯著的就是界面中存在?WebView?的話,由于其初始化的時候會還原?DisplayMetrics#density?的值導致適配失效,當然這點已經有解決方案了,但還會有很多其他情況會還原?DisplayMetrics#density?的值導致適配失效。而我這方案就是為了解決這個痛點,不讓?DisplayMetrics?中的值被還原導致適配失效。

效果

說了這么多,先上下效果圖壓壓驚吧,每種分辨率的圖依次是寬度?1080pt?適配,高度?1920pt?適配以及關閉適配的效果。

480 x 800 - mdpi(160dpi)

720 x 1280 - xhdpi(320dpi)

1080 x 1920 - xxhdpi(480dpi)

1440x2560 - 560dpi

可以看到效果圖中?WebView?對之后的?View?并沒有產生適配失效的問題,這是之前適配所不能解決的問題。

如何根據設計圖創建預覽?

在 AS 中?Tools -> AVD Manager -> Create Virtual Device...,我們以適配?1080 x 1920px 為例,具體操作如下:

創建完設備我們在預覽界面選中這個設備即可看到?pt?單位效果。

設計師給你的設計圖尺寸是多少,那你就建多少尺寸的設備即可,比如是?720 x 1280px 的,那你把上圖的尺寸換成?720?和?1280,再計算下屏幕尺寸即可,如果是?360 x 640dp 的話,那就把上圖的尺寸換成?360?和?640,再計算下屏幕尺寸即可,不用去 care 單位到底是什么,設計圖標注多少那你就寫多少即可,無需換算。適配的時候傳入這個維度的尺寸值即可,比如?720 x 1280?的寬度適配,那就傳入?720?即可。

原理及用法

原理其實也是基于頭條的原理,不過我是操作?pt,所以不是改?DisplayMetrics#density,而是?DisplayMetrics#xdpi,由于適配不會失效,所以需要在適配的?Activity?中重寫下?getResources()?函數,因為每次?View?在變更尺寸時都會調用到?getResources(),所以我們直接在這里進行適配就不會導致失效,效果圖中對應的代碼分別如下所示:

其源碼、Demo 以及 API 如下所示:

AdaptScreen 相關 -> [AdaptScreenUtils.java][adaptScreen.java] -> [Demo][adaptScreen.demo]

pt2Px 及 px2Pt 是提供給需要動態操作?View?的。

如上只需依賴?AndroidUtilCode?最新版本即可:

結尾的話

看了原理之后是不是覺得很簡單,但能想到這種解決方案的又能有幾人呢,我也是站在了巨人的肩膀上才能想到這一層次,希望該適配方案能像文章標題一樣終結我們的適配,這是我目前發現最簡單有效的適配方案,如果覺得不錯的話記得推薦給身邊的 Androider 哦,使用過程有問題的話歡迎同步到?「Android 屏幕適配終結者」問題匯總?這個 issue 中。

最后再插個內容,AndroidUtilCode?項目已改造為組件化,有興趣的可以翻閱源碼查看,相信你肯定會學到不少好東西的,下一篇文章我會為大家介紹下這方面的內容,期待我能盡快出產吧。

推薦閱讀

分享一套Android快速開發模板,包含常用主流框架,下載即用

簡歷上的哪些內容才是 HR 眼中的干貨?

微信掃一掃識別小程序


長按識別小程序,參與抽獎


總結

以上是生活随笔為你收集整理的Android 屏幕适配终结者的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。