Android 螢幕適配

2021-09-22 09:12:15 字數 2901 閱讀 3326

乙個android專案有很多drawable資料夾,分別對應不同的dpi

android sdk會自動螢幕尺寸選擇對應的資源檔案進行渲染,如sdk檢測到你手機dpi是160的話會優先到drawable-mdpi資料夾下找對應的資源,注意只是優先,假設你手機dpi是160,但是你只在xhpdi資料夾下有對應的資源檔案,程式一樣可以正常執行。所以理論上來說只需要提供一種規格的資源就ok了,如果只提供ldpi規格的,對於大解析度的手機如果把放大就會不清晰,所以需要提供一套你需要支援的最大dpi的,這樣即使使用者的手機解析度很小,這樣縮小依然很清晰。

目前市面上最普遍的高階機的解析度還多集中在720x1080範圍,也就是多集中在xhdpi,所以目前來看xhpdi規格的成為了首選。

iphone5的螢幕解析度為640x1164, 螢幕尺寸為4英吋,根據勾股定理(a^2 + b^2 = c^2)640^2+1164^2=1764496, 然後再對其開根號可求出螢幕對角線的解析度為:1328,除以4可得出iphone5的dpi:1328/4≈332 可以看出iphone5的螢幕的dpi約等於320, 剛好屬於xhdpi, 直接把iphone5的那一套切好的資源放入drawable-xhdpi資料夾裡就ok了。

全是xhdpi的資源的話,那麼你用wrap_content完全沒有問題,android會自動為其他規格的dpi螢幕適配,比如你在xhdpi放了一張120x120px大小的,那麼在在hdpi螢幕上顯示的就只有120/2*1.5=90px大小,但是如果你不小心同樣把這張也放入了mdpi了,這個時候用wrap_content顯示就會有問題。

例如假設你只在drawable_xhdpi資料夾下放了test,xhdpi的裝置會去xhdpi資料夾下找到test並直接顯示,而mdpi的裝置優先會去mdpi資料夾裡查詢test,但是沒找到,最後在xhdpi資料夾下找到,然後會自動根據density計算並縮放顯示出來,實際顯示出來的大小是120/2=60px, 所以整體的顯示比例才會看起來比較正常

但是如果你在mdpi資料夾裡也放入了同樣的,那麼mdpi的裝置會直接去mdpi資料夾裡尋找到test,並直接顯示,而這時候顯示不會縮放,實際顯示大小就是120x120,在mdpi的螢幕上看起來就會比較大,如圖:

當你的裝置的最小寬度等於600dp或者更大時,系統選擇layout-sw600dp/main.xml(two_panes)的布局,而小一點的螢幕則會選擇layout/main.xml(single_panes)的布局。

layout-sw600dp和layout-xlarge同時存在,建立不同的values資料夾的layout.xml

比如有乙個布局要相容大小螢幕,在activity中引入的布局名字為activity_my_schedule:

在 res資料夾下建立不同的 values資料夾,來指向同一布局檔案

res/values/layout.xml

name=

"activity_my_schedule"

type=

"layout"

>

@layout/activity_my_schedule_wideitem>

resources>

res/values-sw600dp\layout.xml

name=

"activity_my_schedule"

type=

"layout"

>

@layout/activity_my_schedule_wideitem>

resources>

你可以只使用乙個layout布局檔案,在 res資料夾下建立不同的 values資料夾,來指向不同的局檔案。

我們來看google開源專案iosched中的實際應用,在layout下面有兩個布局檔案,分別用於適配大小螢幕:

res/layout/activity_my_schedule_wide

res/layout/activity_my_schedule_narrow

建立不同的values資料夾的layout,layout用於小螢幕,values-sw600dp-land用於橫屏的情況:

res/values/layout.xml

name=

"activity_my_schedule"

type=

"layout"

>

@layout/activity_my_schedule_narrowitem>

resources>

res/values-sw600dp-land\layout.xml

name=

"activity_my_schedule"

type=

"layout"

>

@layout/activity_my_schedule_wideitem>

resources>

更複雜的需求,不同的情況選擇不同的布局,只需要在res下面建立不同的values的layout,引用指定的布局名稱即可,常見的values型別有:

如果你在使用元件時可以改變影象的大小,你很快就會發現這是乙個不明確的選擇,因為執行的時候,會被拉伸或者壓縮(這樣容易造成影象失真)。

避免這種情況的解決方案就是使用點9,這是一種能夠指定哪些區域能夠或者不能夠拉伸的特殊png檔案。

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...

android螢幕適配

ui在不同的螢幕畫素或大小中顯示效果可能會不同 1 建議使用盡量使用線性布局和相對布局,基本上不會產生螢幕大小不適應的問題 2 設定控制項寬高的時候使用單位dip dp 是根據當前裝置大小比例計算出來的 3 文字設定盡量使用sp單位 4 盡量不使用px設定大小 畫素px和dip相互轉換工具,實現兩種...