我們之前了解過螢幕的畫素密度 dpi,我們身邊有很多種類的手機,它們的dpi各不相同,我們如何去適配這些不同的螢幕呢?
單位務必使用dp
或者sp
;dp
是一種非密度制約畫素,其尺寸與 160 dpi 畫素的實際尺寸相同,即對應mdpi
下的尺寸。sp
也是一種基本單位,它用於設定文字的大小,它可以根據我們設定的文字大小進行調整,類似於dp,但是它只適用於文字的大小的設定,不能設定布局的尺寸。
預設的我們的工程建立完畢之後,會有乙個values的資料夾用來存放一些資源,這裡會有乙個dimens.xml檔案,裡面儲存的都是一些尺寸,不管是、布局的寬高,還是文字的大小都可以引用這裡的尺寸。
name="activity_horizontal_margin">16dpdimen>
name="activity_vertical_margin">16dpdimen>
resources>
我們在布局裡使用時,就可以像這樣
<?xml version="1.0" encoding="utf-8"?>
xmlns:android=""
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/activity_horizontal_margin"
android:orientation="vertical">
linearlayout>
為了適應多種布局,我們需要在不同的螢幕密度下使用不同的values檔案來引用尺寸,我們在前面說過各個螢幕密度對應的資料夾。
名稱畫素密度範圍
mdpi
120dpi-160dpi
hdpi
160dpi-240dpi
xhdpi
240dpi-320dpi
xxhdpi
320dpi-480dpi
***hdpi
480dpi-640dpi
我們為了在不同的螢幕上顯示的效果都相似,需要建立values-mdpi
,values-hdpi
,values-xhdpi
,values-xxhdpi
,values-***hdpi
等資料夾,在每個資料夾下的dimens.xml檔案裡定義我們需要的尺寸,到時候系統會根據螢幕的解析度自動去各個對應的資料夾下去找對應的尺寸。
對於也是一樣,我們可以分別建立drawable-mdpi
,drawable-hdpi
,drawable-xhdpi
,drawable-xxhdpi
,drawable-***hdpi
等資料夾,分別放置不同尺寸的,顯示在不同的解析度的手機上。
比如我們的美工設計的時候是按照1280x720
,4.65 寸的手機設計的ui, 某張圖的尺寸是200x200,那麼我們應該怎麼往各個資料夾下放置呢?
我們可以計算根據公式 pp
i=dp
i=12802+
7202‾‾
‾‾‾‾
‾‾‾‾
‾‾‾√
/4.65
=315
計算出美工設計的是 在 xhdpi 下的圖,切出來的圖是200x200,可以直接放到drawable-xhdpi
下,那麼其它的資料夾呢?我們知道
mdip:hdpi:xhdpi:xxhdip:***hdpi = 2:3:4:6:8,根據比例我們也可看出其它的資料夾下放置的的尺寸了,***hdip
,xxhdpi
,hdpi
、mdpi
下的圖的尺寸應該是 400x400,300x300,150x150,100x100。到時候我們就可以問美工要來這些尺寸進行適配了。
同樣的演算法也適用於values下的dimens中的尺寸,比如美工也是按照1280x720
,4.65 寸的手機設計的ui,標準其中乙個控制項的寬度為200px,那麼我們應該怎麼計算其它dpi下的尺寸呢?我們知道在android系統中是以160dpi 為標準線,在密度為160dpi的手機上1px = 1dp,即mdpi下的尺寸對應的是 1px = 1dp,而我們又知道mdip:hdpi:xhdpi:xxhdip:***hdpi = 2:3:4:6:8,根據這些,我們可以知道dp和px之間的換算公式: dp
×dpi
÷160=p
x 比如我們現在的dpi為315,設計的寬度為 200px,那麼對應的dp值為 dp
=px×
160÷dp
i=200×
160÷
315≈
101.6
由此我們得出了 xhdpi下的尺寸為101.6dp,按比例我們再把其它dpi下的尺寸算出就ok了。
除了這樣算values下的 dimens 中的尺寸,我們還可以按照下面的比例來算:
畫素密度等級
畫素密度與dp轉換關係
mdpi
1dp = 1px
hdpi
1dp = 1.5px
xhdpi
1dp = 2px
xxhdpi
1dp = 3px
***hdpi
1dp = 4px
我們可以看出這張表也是根據2:3:4:6:8這個比例來,不管使用哪種方式,誤差肯定是存在的,不過這些誤差都是在可接受的範圍。可以根據我們的具體情況來選用。
Android之螢幕適配
二 螢幕適配 總結 注意 尺寸和解析度無關 四個方面 禁用絕對布局 由於絕對布局 absolutelayout 適配性極差,所以極少使用。少用px 需求 按鈕佔螢幕的一半 效果 若以px為單位,在左側一半為120px,在右側,120px只佔據1 4的大小 搭配layout weight 使用 wra...
android螢幕適配
1 配置android應用程式適配在不同的手機上,需要在androidmanifest.xml檔案的manifest標籤中新增子元素 1 2 3 4 5 6 7 8 9 10 manifestxmlns android supports screens android smallscreens tr...
Android螢幕適配
在sdk中的幫助文件中。develpe training best practices supporting multiple screens 這裡有多屏適配的介紹。現做簡單記錄。screen size small 至少 426dp x 320dp normal 至少 470dp x 320dp l...