精品欧美一区二区三区在线观看 _久久久久国色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)

91精品啪在线观看国产爱臀| 天堂影院在线| 欧美女优在线视频| 2014亚洲片线观看视频免费| 国产成人欧美在线观看| 国产一区高清在线| 色婷婷激情久久| 色视频一区二区三区| 国产又黄又猛又爽| 一区二区三区国产盗摄| 中文字幕亚洲欧美一区二区三区 | 欧美三级视频在线| 久操手机在线视频| 第一福利在线| 国产成人亚洲精品青草天美| 国产成人拍精品视频午夜网站| 国产suv精品一区二区68| 欧美影院天天5g天天爽| 欧美精品一卡两卡| 日本黄网站免费| 里番在线播放| 本田岬高潮一区二区三区| 国产精品一区=区| 国产乱国产乱老熟| 欧美网站在线| 久久久国产一区| 在线小视频你懂的| 久久视频在线观看| 日韩视频一区二区在线观看| 欧美日韩在线播放三区| 日韩av高清| 欧美 日韩 中文字幕| 九色综合国产一区二区三区| 日本不卡免费一区| 在线观看日韩高清av| 高清欧美精品xxxxx| 18视频在线观看| 国产精品视频免费看| 欧美二级三级| 午夜成人免费影院| 北岛玲一区二区三区四区| 95av在线视频| 国产免费高清av| 久久99精品国产.久久久久久| 欧美三级电影精品| 51国产成人精品午夜福中文下载| 精品国产www| 国产成人手机在线| 日韩特级毛片| 欧美日韩播放| 亚洲精品v天堂中文字幕 | 国产福利在线免费观看| 国产精品盗摄一区二区三区| 亚洲欧美国产不卡| 最新av网站在线观看| 中文字幕av免费专区久久| 日韩精品欧美专区| av电影在线观看一区二区三区| 久久精品在这里| 日本午夜精品电影| www日韩tube| 中文字幕亚洲一区二区va在线| 亚洲精品中文字幕在线| 在线观看免费黄视频| 中文字幕日本不卡| 国产日产欧美一区二区| 高清免费电影在线观看| 一区二区三区在线免费视频| www插插插无码免费视频网站| 国产羞羞视频在线播放| 污片在线观看一区二区| 日韩免费毛片视频| 黑人一区二区三区| 日韩一级二级三级| 中文字幕一区二区人妻电影丶| 欧美人妖在线观看| 国产午夜精品一区二区三区 | 第一sis亚洲原创| 日韩中文字幕国产| 久久免费视频99| 久久久夜精品| 成人性生交大片免费观看嘿嘿视频| 99久久国产免费| av不卡免费电影| 日本一区免费观看| 蜜芽在线免费观看| 色欲人妻综合网| 麻豆影院在线观看| 亚洲精品高清视频在线观看| 欧美性色综合网| 国产黄色一级网站| 成人国产精品| 日韩一区二区电影在线| aa一级黄色片| 国产大片一区| 欧美精品videosex性欧美| 国产精品久久久免费视频| 快she精品国产999| 91在线无精精品一区二区| 日韩中文字幕免费观看| 中国色在线观看另类| 亚洲 欧美 日韩系列| 黄色在线网站| 亚洲乱码国产乱码精品精98午夜| 国产不卡一区二区视频| 日本美女一区| 国产精品视频在线看| 国产日韩视频在线播放| 999福利在线视频| 国产91久久精品一区二区| 亚洲三级av在线| 欧美黑人一级片| 视频一区免费在线观看| 成人免费观看网站| 香蕉视频在线免费看| 黄色精品在线看| 日本一区二区三区在线免费观看| 自拍亚洲一区| 欧美激情日韩图片| 一级二级三级视频| 91捆绑美女网站| 奇米777四色影视在线看| 亚洲不卡系列| 日韩精品久久久久久久玫瑰园| 免费成年人视频在线观看| 久久一二三四| 精品综合久久| 色呦呦在线观看视频| 欧美人妇做爰xxxⅹ性高电影| 偷拍女澡堂一区二区三区| 国产真实久久| 国产精品丝袜视频| 国产青青草在线| 日韩欧美大尺度| av直播在线观看| 一本久道久久综合婷婷鲸鱼| 高清国产一区| 羞羞的网站在线观看| 91精品国产综合久久精品| 日韩在线视频免费看| 丝袜美腿成人在线| 欧美日韩成人一区二区三区| 一个人www视频在线免费观看| 精品国产成人在线影院 | 国外色69视频在线观看| 国内精品久久久久久久久久久| 国产精品福利av| 国产精品区在线| 99精品电影| 91久久精品美女高潮| 国内精品久久久久国产| 91精品国产综合久久精品图片| 黄色a级片在线观看| 狠狠色综合色综合网络| 久久久国产精华液999999| 欧洲午夜精品| 久久精品视频播放| h狠狠躁死你h高h| 亚洲中国最大av网站| 亚洲av综合色区无码另类小说| 激情五月***国产精品| 国产传媒一区| 亚洲妇女成熟| 在线电影中文日韩| 97人人爽人人爽人人爽| 一区二区免费视频| 中文字幕一区二区三区乱码不卡| 亚洲深爱激情| 日韩电影大全在线观看| 欧美美女被草| 色综合视频一区中文字幕| 日本xxxxwww| 福利视频一区二区| 国产在线综合视频| 国产一区二区精品久久91| 国产精品69久久久| 在线日韩一区| 91精品国产自产在线观看永久| av片哪里在线观看| 亚洲福利视频网站| 国产精华7777777| 亚洲女人的天堂| 午夜av免费看| 美女在线一区二区| 国产精品自拍合集| 九九热线有精品视频99| 亚洲aa在线观看| 台湾佬中文娱乐网欧美电影| 中文字幕精品在线视频| 亚洲国产成人在线观看| 色94色欧美sute亚洲线路一ni| 性色国产成人久久久精品| 成人午夜短视频| 日本a√在线观看| 好看的av在线不卡观看| 日本一区二区三区免费看| 亚洲福利合集| 国产精品久久久久久久久久免费| 青草av在线| 色婷婷久久av| 色视频在线看| 欧美一级欧美三级| 成人黄色免费网| 亚洲第一搞黄网站| www.黄色com| 91蜜桃视频在线| 无码人妻少妇色欲av一区二区| 香蕉久久夜色精品| 人妻无码一区二区三区四区| 视频一区中文| 国产一区二区免费电影| 只有精品亚洲| 97色伦亚洲国产| 在线电影福利片| 中文字幕精品视频| 欧美日韩在线中文字幕| 精品国产91九色蝌蚪| 国产精品毛片一区二区在线看舒淇 | 动漫一区二区| 日韩有码在线电影| 国产高清av在线| 亚洲精品永久免费| 午夜性色福利影院| 精品成人一区二区| 国产日韩一级片| 欧美日韩国产天堂| 无码人妻精品一区二区蜜桃色欲| 午夜精品久久久久久久久久| 日本韩国一区二区| 国产亚洲欧美精品久久久www| 国产精品护士白丝一区av| 亚洲精品成人无码| 97久久久精品综合88久久| 人妻换人妻仑乱| 国产精品综合av一区二区国产馆| 亚洲一级免费观看| 欧美aaaaaa午夜精品| 日韩欧美精品在线观看视频| 国产亚洲激情| 鲁一鲁一鲁一鲁一色| 99xxxx成人网| 久久久一本二本三本| 亚洲激情综合| www.射射射| 亚洲一区激情| 黄色免费观看视频网站| 国产视频一区免费看| 波多野结衣家庭教师在线| 一区二区动漫| 成人黄色片视频| 蜜臀av性久久久久蜜臀aⅴ| 精品999在线| 美国av一区二区| 激情图片中文字幕| 国产成人精品一区二区三区网站观看| 手机在线观看日韩av| 国产69精品一区二区亚洲孕妇| 久久无码专区国产精品s| 成人美女在线视频| 欧美熟妇精品黑人巨大一二三区| 91丝袜高跟美女视频| xxxxx在线观看| 国产精品国产三级国产aⅴ原创 | 日韩欧美精品| 99久久久无码国产精品性色戒| 亚洲综合自拍| 青青青在线视频播放| 亚洲制服少妇| 艹b视频在线观看| 国产一区激情在线| 国产人妻黑人一区二区三区| 久久婷婷成人综合色| 久久日免费视频| 一区二区三区欧美视频| 日韩精品无码一区二区| 日本高清视频一区二区| 国产日本精品视频| 亚洲国产日韩欧美在线动漫| 狠狠狠综合7777久夜色撩人| 日韩中文字幕免费| 欧美a级在线观看| 国产欧美久久久久久| 91蝌蚪精品视频| 奇米精品在线| 午夜性色一区二区三区免费视频 | 女人高潮被爽到呻吟在线观看| 国产精品va在线播放我和闺蜜| 成人激情久久| 欧美高清一区二区| 自拍偷拍欧美| 亚洲黄色性网站| 国产精品无码无卡无需播放器| 亚洲乱码中文字幕综合| 国产中文字幕视频| 日韩欧美国产不卡| 成人在线免费公开观看视频| 欧美精品一区二区免费| 成人看片在线观看| 国产精品二区在线| 成人在线免费观看网站| 97视频久久久| 国内精品在线播放| 成人性生交大免费看| 亚洲国产成人精品视频| 一本色道久久综合亚洲| 亚洲精品在线观看www| 日韩激情av| 国产日韩亚洲欧美| 国产99久久| 欧美日韩性生活片| 国产在线精品一区二区三区不卡| 极品粉嫩小仙女高潮喷水久久| 亚洲欧美日韩国产综合在线| 国产一级淫片a视频免费观看| 日韩精品最新网址| 老司机精品影院| 国产精品电影网| 天堂av一区二区三区在线播放| 国产制服91一区二区三区制服| 美女任你摸久久| 欧美成人国产精品一区二区| 亚洲成人av一区二区| 国产高清精品软件丝瓜软件| 色青青草原桃花久久综合| 日韩av中字| 老司机精品福利在线观看| 亚洲特级毛片| 精品国产午夜福利在线观看| 国产精品久久久久影院老司 | 免费在线观看成人av| 久久久久久久久久影视| 亚洲视频免费观看| 97人妻人人澡人人爽人人精品| 日韩天堂在线视频| 色猫猫成人app| 日韩视频精品| 日韩福利电影在线| 美国黑人一级大黄| 欧美日韩视频在线一区二区| 国产高清免费av在线| 日韩免费高清在线观看| 自拍欧美一区| 国产精品一区二区羞羞答答| 久久精品亚洲国产奇米99| 免费观看日批视频| 国产亚洲在线播放| 精品国产美女a久久9999| 亚洲国产精品www| 麻豆一区二区在线| 91制片厂在线| 日韩欧美一区二区三区在线| 怡红院在线播放| 国产经典一区二区三区 | 亚洲欧洲国产专区| 国产人妻精品一区二区三| 欧美成人高清视频| 97久久综合区小说区图片区| 国产亚洲黄色片| 日韩在线综合| 国产精品国产三级国产专播精品人| 亚洲国产精品嫩草影院久久av| 精品一卡二卡三卡| 中文字幕av一区二区三区高| 91av久久久| 欧美激情a在线| 尤物tv在线精品| 午夜一区二区视频| 亚洲一线二线三线视频| 天堂成人在线| 国产精品一区二区三区久久| 亚洲午夜精品一区 二区 三区| 亚洲国产精品狼友在线观看| 五月天激情综合| 高清毛片在线看| 亚洲一区二区三区乱码aⅴ| 精品动漫3d一区二区三区免费版 | 黄色成人免费看| 亚洲日本中文字幕区| 刘玥91精选国产在线观看| 日韩美女视频在线观看| 99久久影视| 人体私拍套图hdxxxx| 欧美专区日韩专区| 日韩三级电影视频| 日韩精品一区二区三区外面 | 亚洲色图14p| 欧美三级视频在线| av资源在线播放| 亚洲欧美影院| 99久久精品免费| 国产又粗又猛视频免费| 久久人人爽人人| 久久高清免费| 久久久无码人妻精品一区| 欧美日韩高清在线| 日本三级一区| 狠狠干视频网站| 欧美激情一区二区三区不卡| 国内爆初菊对白视频| 国产精品久久久久久久久久ktv|