精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一種粗暴快速的Android全屏幕適配方案

移動(dòng)開發(fā) Android
由于Android碎片化嚴(yán)重,屏幕適配一直是開發(fā)中較為頭疼的問題。面對市面上五花八門的屏幕大小與分辨率,Android基于dp與res目錄名稱來適配的方案已無法滿足一次編寫全屏幕適配的需求,為了達(dá)到最優(yōu)的視覺效果,開發(fā)過程中總是需要花費(fèi)較多資源進(jìn)行適配。

一、現(xiàn)狀

由于Android碎片化嚴(yán)重,屏幕適配一直是開發(fā)中較為頭疼的問題。面對市面上五花八門的屏幕大小與分辨率,Android基于dp與res目錄名稱來適配的方案已無法滿足一次編寫全屏幕適配的需求,為了達(dá)到***的視覺效果,開發(fā)過程中總是需要花費(fèi)較多資源進(jìn)行適配。也有開發(fā)者給出了一些自己的解決方案。首先來分析一下一些常見的解決方案的現(xiàn)狀:

官方適配方案

dp。dp是Android開發(fā)中特有的一個(gè)單位。與px不同,dp是基于屏幕像素密度的一種單位。在密度低的屏幕上或許1dp=1px,但在密度高的屏幕上可能1dp=4px。編寫布局xml時(shí),如果一個(gè)控件的長寬都使用dp來指定,那么能確保該控件在各種大小與分辨率的屏幕下的絕對大小都大致相當(dāng)。也就是說無論在pad下還是大小屏手機(jī)下,我們實(shí)際看到的該控件的大小是差不多的:

 

圖一.png

資源目錄名。上圖可見雖然使用dp確保了控件在不同屏幕中的絕對大小一致。這樣的好處在于,在大小相近的屏幕中,無論分辨率多大都不會(huì)對布局造成影響;但是當(dāng)屏幕大小相差較大時(shí),僅保證控件的絕對大小看起來就有些問題了。在res目錄下可以給各資源目錄都加上例如'-1920x1080'等后綴來適配不同的屏幕,具體規(guī)則可見官網(wǎng)文檔。這樣可以針對不同的屏幕提供不同的布局,甚至針對pad與手機(jī)提供兩套完全不同的布局樣式。但是通常情況下,設(shè)計(jì)師并不會(huì)對不同屏幕提供不同的設(shè)計(jì)圖,他們的需求僅僅是不同屏幕下控件對屏幕的相對大小一致,所以dp并不能滿足這一點(diǎn),而對各種屏幕適配一遍又顯得略為繁瑣,并且修改也較為麻煩。通常我們需要的適配是這樣的:

 

圖二.png

百分比布局支持庫。沒有使用過,但是deprecated in API level 26.0.0-beta1。

ConstraintLayout。百分比支持庫deprecated之后推薦使用的布局,看起來似乎略復(fù)雜。

玩家適配方案。廣大玩家的適配目的很明確,目的就是要確??丶诓煌聊坏南鄬Υ笮∫恢?,看起來一毛一樣的。以一位大神玩家的兩種適配方案為例:

  1. 方案一。編寫腳本將長度轉(zhuǎn)換成各分辨率下的長度,缺點(diǎn)是難以覆蓋市面上的所有分辨率。
  2. 方案二。AutoLayout支持庫。該庫的想法非常好:對照設(shè)計(jì)圖,使用px編寫布局,不影響預(yù)覽;繪制階段將對應(yīng)設(shè)計(jì)圖的px數(shù)值計(jì)算轉(zhuǎn)換為當(dāng)前屏幕下適配的大小;為簡化接入,inflate時(shí)自動(dòng)將各Layout轉(zhuǎn)換為對應(yīng)的AutoLayout,從而不需要在所有的xml中更改。但是同時(shí)該庫也存在以下等問題:
  • 擴(kuò)展性較差。對于每一種ViewGroup都要對應(yīng)編寫對應(yīng)的AutoLayout進(jìn)行擴(kuò)展,對于各View的每個(gè)需要適配的屬性都要編寫代碼進(jìn)行適配擴(kuò)展;

在onMeasure階段進(jìn)行數(shù)值計(jì)算。消耗性能,并且這對于非LayoutParams中的屬性存在較多不合理之處。比如在onMeasure時(shí)對TextView的textSize進(jìn)行換算并setTextSize,那么玩家在代碼中動(dòng)態(tài)設(shè)置的textSize都會(huì)失效,因?yàn)樵诿看蝟nMesasure時(shí)都會(huì)重新被AutoLayout重新設(shè)置覆蓋。

issue較多并且作者已不再維護(hù)。

二、想法

對于大小差異較大的屏幕,本不該使用同一套設(shè)計(jì)方案,否則大屏的優(yōu)勢沒有完全體現(xiàn)出來,從官方的適配方案也似乎是表達(dá)了這個(gè)意思。但是在實(shí)際設(shè)計(jì)與開發(fā)中,對于一個(gè)普通的App,很少有項(xiàng)目有意愿有精力來對各屏幕來分別設(shè)計(jì)與開發(fā)一套設(shè)計(jì)方案來適配。

通常的一個(gè)簡單的適配需求是:假如設(shè)計(jì)圖寬度為200,一個(gè)控件在設(shè)計(jì)圖上標(biāo)注的長度為3,那么該控件長度相當(dāng)于總寬度的3/200,那么我們希望在任何大小的屏幕上該控件所表現(xiàn)的長度都為屏幕寬度的3/200。

個(gè)人覺得AutoLayout的設(shè)計(jì)思想非常優(yōu)秀,但是將LayoutParams與屬性作為切入口在mesure過程中進(jìn)行轉(zhuǎn)換計(jì)算的方案存在效率與擴(kuò)展性等方面的問題。那么Android計(jì)算長度的收口在哪里,能不能在Android計(jì)算長度時(shí)進(jìn)行換算呢?如果能在Android計(jì)算長度時(shí)進(jìn)行換算,那么就不需要一系列多余的計(jì)算以及適配,一切問題就都迎刃而解了。

經(jīng)過一番尋覓,發(fā)現(xiàn)系統(tǒng)進(jìn)行長度計(jì)算的收口為TypedValue中的applyDimension函數(shù),傳入單位與value將其計(jì)算為對應(yīng)的px數(shù)值。

 

  1. public static float applyDimension(int unit, float value, 
  2.                                        DisplayMetrics metrics) 
  3.     { 
  4.         switch (unit) { 
  5.         case COMPLEX_UNIT_PX: 
  6.             return value; 
  7.         case COMPLEX_UNIT_DIP: 
  8.             return value * metrics.density; 
  9.         case COMPLEX_UNIT_SP: 
  10.             return value * metrics.scaledDensity; 
  11.         case COMPLEX_UNIT_PT: 
  12.             return value * metrics.xdpi * (1.0f/72); 
  13.         case COMPLEX_UNIT_IN: 
  14.             return value * metrics.xdpi; 
  15.         case COMPLEX_UNIT_MM: 
  16.             return value * metrics.xdpi * (1.0f/25.4f); 
  17.         } 
  18.         return 0; 
  19.     } 

可以看見換算方法非常簡單,而DisplayMetrics的所有屬性都是public的,不用反射就能修改;

pt的原意是長度單位磅,根據(jù)當(dāng)前屏幕與設(shè)計(jì)圖尺寸將metrics.xdpi進(jìn)行修改就可以實(shí)現(xiàn)將pt這個(gè)單位重定義成我們所需要的相對長度單位,使修改之后計(jì)算出的1pt實(shí)際對應(yīng)的px/屏幕寬度px=1px/設(shè)計(jì)圖寬度px。

而這個(gè)DisplayMetrics從哪來?從源碼中可以看出一般為mContext.getResources().getDisplayMetrics(),這個(gè)mContext即為所在Activity;

橫豎屏切換等Configuration的變化會(huì)導(dǎo)致DisplayMetrics的重新計(jì)算還原;

px,dp與sp都是平時(shí)常用的單位,而pt,in與mm幾乎沒有看見過,從這些不常見的單位下手正好可以不影響其他常用的單位。

基于以上幾點(diǎn),便有了以下方案。

三、方案

本適配方案的目標(biāo)是:完全按照設(shè)計(jì)圖上標(biāo)注的尺寸來編寫頁面,所編寫的頁面在所有大小與分辨率的屏幕上都表現(xiàn)一致,即控件在所有屏幕上相對于整個(gè)屏幕的相對大小都一致(看起來只是將設(shè)計(jì)圖等比縮放至屏幕寬度大小)。

核心。使用冷門的pt作為長度單位,按照上述想法將其重定義為與屏幕大小相關(guān)的相對單位,不會(huì)對dp等常用單位的使用造成影響。

繪制。編寫xml時(shí)完全對照設(shè)計(jì)稿上的尺寸來編寫,只不過單位換為pt。假如設(shè)計(jì)圖寬度為200,一個(gè)控件在設(shè)計(jì)圖上標(biāo)注的長度為3,只需要在初始化時(shí)定義寬度為200,繪制該控件時(shí)長度寫為3pt,那么在任何大小的屏幕上該控件所表現(xiàn)的長度都為屏幕寬度的3/200。如果需要在代碼中動(dòng)態(tài)轉(zhuǎn)換成px的話,使用TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PT, value, metrics)。

預(yù)覽。實(shí)時(shí)預(yù)覽時(shí)繪制頁面是很重要的一個(gè)環(huán)節(jié)。以1334x750的設(shè)計(jì)圖為例,為了實(shí)現(xiàn)于正常繪制時(shí)一樣的預(yù)覽功能,創(chuàng)建一個(gè)長為1334磅,寬為750磅的設(shè)備作為預(yù)覽,經(jīng)換算約為21.5英寸((sqrt(1334^2+750^2))/72)。預(yù)覽時(shí)選擇這個(gè)設(shè)備即可。

 

圖三.png

 

圖四.png

代碼處理。在activityonCreate時(shí)修改DisplayMetrics即可,推薦寫在基類或ActivityLifecycleCallbacks中,參考github demo。

 

  1. Point size = new Point(); 
  2. activity.getWindowManager().getDefaultDisplay().getSize(size); 
  3. context.getResources().getDisplayMetrics().xdpi = size.x / designWidth * 72f; 

這樣繪制出來的頁面就跟設(shè)計(jì)圖幾乎完全一樣,無論大小屏上看起來就只是將設(shè)計(jì)圖縮放之后的結(jié)果。

適配前(左圖API19 400x800, 右圖API24 1440x2560):

 

圖五.png

適配后(左圖API19 400x800, 右圖API24 1440x2560):

 

圖六.png

雖然方案比較簡單,但是為了方便使用也整理成了一個(gè)library,代碼及demo見github

責(zé)任編輯:未麗燕 來源: 安卓巴士
相關(guān)推薦

2017-08-11 19:02:21

Android全屏幕適配

2009-07-16 16:09:51

Swing全屏幕模式

2009-12-24 14:38:52

WPF全屏幕窗口

2013-07-03 13:54:26

jQuery

2022-05-12 10:36:10

移動(dòng)方案

2011-07-04 17:53:48

快速測試

2013-05-22 09:49:36

2022-07-13 11:49:18

接口遷移方案

2024-04-16 13:56:09

移動(dòng)端安全區(qū)域iOS

2023-07-18 07:23:11

方案payloadrequest

2016-03-21 13:24:22

apk安卓開發(fā)

2009-11-10 14:52:13

VB.NET實(shí)現(xiàn)

2022-07-14 10:02:00

vivoUI適配開發(fā)人員

2022-06-22 09:44:41

Python文件代碼

2022-07-07 10:33:27

Python姿勢代碼

2020-12-23 10:10:23

Pythonweb代碼

2020-12-09 10:15:34

Pythonweb代碼

2017-02-14 17:29:42

Android毛玻璃虛化效果

2014-12-01 09:54:40

JavaScript

2018-01-31 09:23:57

惡意軟件代碼方法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

97精品视频| 国产亚洲一区二区手机在线观看 | 午夜精品久久久久久久白皮肤| 一区二区在线免费观看视频| 波多野结衣中文字幕久久| 99久久免费精品| 国产精品日日做人人爱| 欧美日韩免费一区二区| 亚洲男人都懂第一日本| 在线播放国产精品二区一二区四区 | 蜜桃视频在线免费| 久久电影网站中文字幕| 91精品国产九九九久久久亚洲| 黄色片在线观看免费| 少妇精品在线| 欧美视频一二三区| 日韩欧美不卡在线| 精品176二区| 国产亚洲欧洲一区高清在线观看| 亚洲综合av影视| 99re这里只有精品在线| 欧美日韩一区自拍| 精品国产拍在线观看| 在线观看免费视频黄| 4438五月综合| 欧美少妇bbb| 成熟了的熟妇毛茸茸| 制服丝袜中文字幕在线| 中文字幕中文在线不卡住| 久久久亚洲综合网站| 后入内射欧美99二区视频| 青青草97国产精品免费观看| …久久精品99久久香蕉国产| 男人操女人的视频网站| 日韩久久精品| 国产一区二区三区日韩欧美| 变态另类丨国产精品| av日韩在线播放| 日韩三级在线免费观看| 99九九精品视频| 亚洲成人高清| 在线电影国产精品| 97公开免费视频| 欧美xx视频| 日韩欧美中文在线| 亚洲成熟丰满熟妇高潮xxxxx| hd国产人妖ts另类视频| 一区二区三区日本| 蜜臀av性久久久久蜜臀av| 色影院视频在线| 国产精品国产三级国产普通话蜜臀| 蜜桃导航-精品导航| 污污网站免费在线观看| 久久综合精品国产一区二区三区| 国产日韩亚洲精品| 日韩在线观看视频网站| av一区二区不卡| 麻豆成人小视频| 欧洲伦理片一区 二区 三区| 久久亚洲综合色一区二区三区| 久久影院理伦片| 国产免费永久在线观看| 欧美韩国日本一区| 在线综合视频网站| 国产激情在线| 亚洲福利一区二区| 日韩精品xxxx| 激情亚洲影院在线观看| 欧美日韩国产高清一区二区| 天天久久综合网| 国产一区二区高清在线| 精品国产一区二区三区久久久蜜月| 怡红院一区二区| 蜜桃成人av| 久久精品人人爽| 国产在线精品观看| 久久综合激情| 亚洲自拍偷拍区| 亚洲色图 校园春色| 国产午夜久久久久| 国风产精品一区二区| 国产福利电影在线播放| 欧美综合欧美视频| 无套内谢丰满少妇中文字幕| 国产成人精品亚洲线观看| 亚洲乱码一区二区| 情侣偷拍对白清晰饥渴难耐| 韩国av一区| 国产大片精品免费永久看nba| 在线观看国产精品入口男同| 国产成人精品一区二| 免费看成人片| 宅男网站在线免费观看| 欧美日韩一区免费| 亚洲天堂av一区二区| 欧美一区二区三区红桃小说| 日韩有码在线观看| av中文在线播放| 狠狠色伊人亚洲综合成人| 国产精品一区二区免费| 视频三区在线| 欧美性精品220| 亚洲三级在线视频| 欧美综合在线视频观看| 欧美丰满少妇xxxx| 中文字幕自拍偷拍| av男人天堂一区| 久久av喷吹av高潮av| 波多野结衣亚洲一二三| 欧美mv日韩mv亚洲| 久久午夜精品视频| 性色一区二区| 成人三级视频在线观看一区二区| 懂色av中文在线| 无码av免费一区二区三区试看 | www.com毛片| 久久国际精品| 中文字幕在线成人| 区一区二在线观看| 成人综合婷婷国产精品久久蜜臀| 亚洲人成77777| 久久毛片亚洲| 日韩乱码在线视频| 久青草视频在线观看| 国产中文字幕精品| 亚洲v国产v| 3d性欧美动漫精品xxxx软件| 亚洲国产精彩中文乱码av在线播放| 黄色录像二级片| 美女视频黄 久久| 午夜精品区一区二区三 | 国产日韩欧美视频| 精品视频三区| 欧美性猛交xxxx久久久| 波多野结衣有码| 伊人久久大香线蕉av超碰演员| 91午夜理伦私人影院| 午夜不卡视频| 在线电影院国产精品| 国产精品久久久免费看| 麻豆一区二区三| 亚洲精品高清国产一线久久| 久久亚洲精品爱爱| 在线观看视频99| 在线观看国产成人| 亚洲色图视频网站| 在线观看免费看片| 欧美另类视频| 国产精品theporn88| 激情网站在线| 日韩电影免费观看中文字幕| 成年免费在线观看| 久久久综合九色合综国产精品| www.浪潮av.com| 亚洲影院天堂中文av色| 国产精品久久久久9999| 成人在线免费观看| 欧美日韩国产123区| 亚洲波多野结衣| 国产精品白丝jk黑袜喷水| a级片一区二区| 欧美调教在线| 国产精品观看在线亚洲人成网| 国产视频精选在线| 欧美精品日韩综合在线| 欧美日韩在线视频免费播放| 成人午夜电影小说| 99爱视频在线| 日韩一区自拍| 91精品视频专区| 国产网站在线| 亚洲最新av在线| 在线观看国产精品入口男同| 一区二区三区在线视频免费| 欧美xxxxx精品| 日韩一区欧美二区| 一级黄色免费在线观看| 日韩中文字幕无砖| 91av网站在线播放| 男人影院在线观看| 精品区一区二区| 九九热最新视频| 亚洲精品美腿丝袜| 国产aⅴ激情无码久久久无码| 美女国产一区二区| 男的插女的下面视频| 神马久久一区二区三区| 99r国产精品视频| 欧美无毛视频| 色综合久久天天综线观看| 日本午夜在线视频| 欧美一级爆毛片| 丁香社区五月天| 亚洲综合丁香婷婷六月香| 韩国女同性做爰三级| 国产精品18久久久久久久久| 亚洲精品无码久久久久久| 一级毛片免费高清中文字幕久久网| 久久人人爽爽人人爽人人片av| 四虎永久精品在线| 日本电影亚洲天堂| 免费看电影在线| 日韩中文字幕视频| 九色在线视频蝌蚪| 亚洲精品国产精品国自产在线| 亚洲视频在线观看一区二区| 午夜激情综合网| 国产精品老熟女一区二区| 国产亚洲精品超碰| 精品无码在线视频| 成人免费视频视频| 午夜激情视频网| 七七婷婷婷婷精品国产| 欧美 日韩 国产在线观看| 亚洲色图二区| 杨幂一区欧美专区| 夜夜春成人影院| 国产精品日韩一区二区三区 | 日韩女优电影在线观看| 波多野结衣电车痴汉| 香蕉av福利精品导航| 欧美日韩免费做爰视频| 自拍偷拍国产亚洲| 国产又黄又粗又猛又爽的| 久久久精品黄色| 亚洲第九十七页| 99久久婷婷国产综合精品电影| 亚洲成人福利视频| 国产精品996| 日韩av福利在线观看| 国内一区二区在线| 97人人爽人人| 激情综合色播激情啊| 亚洲一区在线不卡| 蜜臂av日日欢夜夜爽一区| 国产精品99久久免费黑人人妻| 国产一区二区三区的电影| 免费国产黄色网址| 亚洲精品字幕| 激情深爱综合网| 国产欧美91| 日本精品一区在线观看| 国产午夜久久| 成年人在线看片| 日本少妇一区二区| 天美星空大象mv在线观看视频| 天堂久久一区二区三区| 黄色成人免费看| 美国av一区二区| 久久精品一卡二卡| 国产精品888| 中文字幕在线播放视频| 91丝袜呻吟高潮美腿白嫩在线观看| 国产伦精品一区二区三区妓女| 久久久久久亚洲综合影院红桃| 黄色aaa视频| 国产精品网站在线播放| 91香蕉一区二区三区在线观看 | av大全在线观看| 色婷婷亚洲精品| 黄色一区二区视频| 欧美精品精品一区| 精品国自产拍在线观看| 亚洲精品美女久久久| 久久精品蜜桃| 日韩小视频在线| 男女在线视频| 日韩av电影中文字幕| 日本a人精品| 不卡视频一区二区| 蜜桃精品噜噜噜成人av| 亚洲春色综合另类校园电影| 久久久久久久久久久久久久久久久久 | 天天色天天操综合| 无码人妻精品一区二区50| 欧美日韩国产中文| 亚洲狼人综合网| 亚洲人成电影网站色…| a视频在线观看| 欧美一级电影免费在线观看| 久久99国产精品二区高清软件| 亚洲一区中文字幕| 杨幂一区二区三区免费看视频| 亚洲色图自拍| 国产日韩欧美一区| 污污的视频免费| av成人动漫在线观看| 日本猛少妇色xxxxx免费网站| 尤物视频一区二区| 国产精品第5页| 日韩欧美一级精品久久| 高清av在线| 久久久久女教师免费一区| 日韩和的一区二在线| 99久久精品免费看国产四区| 欧美色蜜桃97| 人妻久久久一区二区三区| 卡一卡二国产精品| 国产呦小j女精品视频| 亚洲精品国产第一综合99久久 | 日韩一区二区免费电影| 蜜桃视频在线观看网站| 欧美激情二区三区| 亚洲综合资源| 欧美资源一区| 99在线精品视频在线观看| 色婷婷激情视频| 国产欧美日韩三级| 日韩视频免费观看高清| 欧美一区二区在线不卡| a天堂在线资源| 欧洲亚洲女同hd| 国偷自产视频一区二区久| www.亚洲一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品无码网站| 亚洲一区二区影院| 999av视频| 精品国产网站地址| 992tv国产精品成人影院| 欧美精品一区二区视频| 99re国产精品| 挪威xxxx性hd极品| 亚洲一区二区影院| 亚洲产国偷v产偷v自拍涩爱| www.久久久久久.com| 黄色欧美视频| 先锋影音一区二区三区| 日韩激情一区二区| 中文字幕在线1| 色综合久久九月婷婷色综合| 少妇人妻一区二区| 性日韩欧美在线视频| 91亚洲精品视频在线观看| 欧美中日韩在线| 国产成人8x视频一区二区| 久草资源在线视频| 精品久久久三级丝袜| 欧美黑人猛交| 国产日韩一区二区三区| 国产一区成人| 能免费看av的网站| 91成人网在线| 成人影视在线播放| 国产日韩在线看片| 五月天激情综合网| 日本黄色www| 午夜精品久久久久久久99水蜜桃| 色丁香婷婷综合久久| 97免费视频在线播放| 美女久久99| av污在线观看| 亚洲毛片av在线| 性生交大片免费看女人按摩| 久久久久五月天| 亚洲电影一级片| 亚洲国产精品三区| 日韩毛片精品高清免费| 亚洲av综合色区无码一二三区| 欧美黑人性视频| 亚洲精品亚洲人成在线| 五月婷婷激情久久| 亚洲欧美一区二区不卡| 免费国产黄色片| 国产成人一区二| 久久精品一区二区不卡| 欧美性生交xxxxx| 色狠狠一区二区| 黄色av电影在线观看| 国产精品久久久久免费| 先锋影音久久| 永久av免费网站| 亚洲第一国产精品| 电影一区电影二区| 日本美女爱爱视频| 91亚洲精品乱码久久久久久蜜桃| www.av88| 欧美激情精品久久久久| 久久最新网址| 国产xxxxhd| 色综合天天综合给合国产| 秋霞成人影院| 国产伦精品一区二区三区| 日韩国产精品久久久| www青青草原| 亚洲人成网站色ww在线| 精品99re| www日韩视频| 午夜影院在线观看欧美| 日本福利在线| 精品午夜一区二区| 紧缚奴在线一区二区三区| 久久久久久久黄色片| 久久亚洲国产精品| 精品在线手机视频| 欧美久久久久久久久久久| 欧美日韩国产综合一区二区 | 国产精品大片免费观看| 国产一区二区三区四区五区六区| 日韩精品一区二区三区四区视频|