有幾個概念以及相關公式先理解下:
1、dp:device independent pixels(設備獨立像素),是像素和密度的比
dp = px / density
2、dpi(dot per inch每英寸的點數)和ppi相等,是屏幕對角線的像素數和屏幕尺寸的比例
dpi = ppi = (√(screenHeight^2 + screenWidth^2)) / 屏幕大小(inch)
3、密度是dpi和160的比例
density = dpi / 160
4、英寸是相許和dpi或ppi的比例
inch = px / dpi = px / ppi
適配,按自己理解的只有以下兩種情況(有不同見解可以補充)
先看第一種情況(屏幕寬度相同,分辨率不同)
1、一款分辨率是480 * 800的手機,寬 480,高800,高度一般會受虛擬鍵等的影響,但寬度是一定的,以寬度為標准,所以,一般都是按寬度進行區分
160dpi 屏幕寬度為3 inch,dp為480dp
2、另外一款分辨率 720 * 1280的手機寬 720,高1280
240dpi 屏幕寬度為3 inch,dp同樣為480dp
所以,兩款手機屏幕大小一樣,但是分辨率不同,因此,相同的布局文件相同的dimens文件完全適用於這兩款手機
但是圖片呢,相同的圖片,分別放在drawable-mdpi和drawable-hdpi,
在第一款手機上顯示正常,在第二款手機上卻會顯得小,所以,高密度的圖片應該做大
(注:如果只有一套圖,比如放在drawable-mdpi中,圖片顯示大小是相同的)
第二種情況(分辨率相同,屏幕寬度不同)
1、一款分辨率 720 * 1280的手機寬 720,高1280
160dpi 屏幕寬度為4.5 inch,dp為720dp
2、一款分辨率 720 * 1280的手機寬 720,高1280
240dpi 屏幕寬度為3 inch,dp為480dp
借上一種情況結果,圖片會做不同尺寸,現在布局和尺寸可能會不同了
所以,布局和尺寸需要進行適配,如果不同大小的屏幕需要不同布局。
例如第一款手機,可能是平板大小了,布局和手機不同,layout不能適用於平板,
因此,需要重新建立文件夾重新布局例如 layout-sw720dp
第二款手機,布局也不同,需要建立layout-sw480dp
對於不同屏幕尺寸,view的尺寸可能也會有不同
在values中會有dimen.xml文件,因此尺寸也需要適配
可能會建立如下目錄values-sw720dp、values-sw480dp
sw720dp、sw480dp的格式如下:
sw<N>dp (smallestWidth)屏幕橫豎屏切換,最小屏幕寬度不會發生變化
w<N>dp 屏幕橫豎屏切換,屏幕寬度會根據橫豎屏發生變化
其中的N指的是屏幕寬度,單位dp,720px不同密度,寬度不同,所以會有不同目錄
這種使用方式是3.2才開始使用,之前是使用small、normal、large、xlarge這種
目錄名稱舉例:
layout-sw720dp、layout-sw480dp、layout-sw320dp、layout-large、values-sw480dp等
總結,就目前自己了解的適配就這兩種情況
1、屏幕寬度相同,分辨率不同(適配不同密度圖片、不同密度的樣式、主題等)
2、分辨率相同,屏幕寬度不同(適配不同布局、適配不同尺寸)
另外,從android生成的目錄結構來看,應該還有第三種,適配不同版本
如values目錄會有values-v11、values-v14,裡邊只有style.xml,
是不同的主題,可能是不同版本的android,主題有新增的,想在新版本使用新ui界面,做的適配,未經證實,僅是猜測。