1. 適配使用的布局
在杭錦后等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)整合營銷推廣,成都外貿(mào)網(wǎng)站建設(shè),杭錦后網(wǎng)站建設(shè)費用合理。目前版本Google還是希望開發(fā)者通過 ConstraintLayout 布局完成適配
2. 對于特定屏幕
創(chuàng)建備用布局,即在res/layout/目錄下創(chuàng)建對應(yīng)尺寸的布局文件 例: layout-w600dp,例如用戶啟動多窗口時
另在 Android Studio 3.0或更高版本中創(chuàng)建備用布局
此時系統(tǒng)會在相應(yīng)的布局目錄中創(chuàng)建一個重復(fù)的布局文件,以便您可以開始自定義該屏幕變體的布局。
3. 設(shè)定最小寬度值
最小寬度限定符指定屏幕兩側(cè)的最小尺寸,而不考慮設(shè)備當(dāng)前的屏幕方向,因此這是一種指定布局可用的整體屏幕尺寸的簡單方法。
下面是其他最小寬度值與典型屏幕尺寸的對應(yīng)關(guān)系:
圖 4 提供了一個更詳細(xì)的視圖,說明了不同屏幕 dp 寬度與不同屏幕尺寸和方向的一般對應(yīng)關(guān)系。
圖 4. 建議的寬度斷點以支持不同的屏幕尺寸
請記住,最小寬度限定符的所有數(shù)值都是密度無關(guān)像素,因為重要的是系統(tǒng)考慮像素密度(而不是原始像素分辨率)之后可用的屏幕空間量。
注意:您使用這些限定符指定的尺寸不是實際屏幕尺寸,而是 Activity 的窗口可用的寬度或高度(以 dp 為單位)。Android 系統(tǒng)可能會將部分屏幕用于系統(tǒng)界面(如屏幕底部的系統(tǒng)欄或頂部的狀態(tài)欄),因此部分屏幕可能不可供您的布局使用。如果您的應(yīng)用在多窗口模式下使用,則它只能使用該窗口的尺寸。該窗口進(jìn)行大小調(diào)整時,會使用新窗口尺寸觸發(fā)配置更改,以便系統(tǒng)可以選擇適當(dāng)?shù)牟季治募?。因此,在聲明尺寸時,您應(yīng)具體說明 Activity 需要的尺寸。在聲明為布局提供多少空間時,系統(tǒng)會考慮系統(tǒng)界面使用的所有空間。
4. 使用布局別名
如果同時支持低于和高于 Android 3.2 的版本,那么您必須同時對布局使用最小寬度限定符和 large 限定符。因此,您應(yīng)創(chuàng)建一個名為 res/layout-large/main.xml
的文件,該文件可能與 res/layout-sw600dp/main.xml
完全相同。
為避免同一文件出現(xiàn)這種重復(fù),您可以使用別名文件。例如,您可以定義以下布局:
res/layout/main.xml # single-pane layout res/layout/main_twopanes.xml # two-pane layout并添加以下兩個文件:
res/values-large/layout.xml
: res/values-sw600dp/layout.xml
:
這兩個文件的內(nèi)容完全相同,但它們實際上并未定義布局,而只是將 main
設(shè)為 main_twopanes
的別名。由于這些文件具有 large
和 sw600dp
選擇器,因此無論使用的是哪個 Android 版本,它們都適用于大屏幕(低于 3.2 版本的平板電腦和 TV 與 large
匹配,高于 3.2 版本的平板電腦和 TV 與 sw600dp
匹配)
5. dp單位轉(zhuǎn)像素單位的說明
在某些情況下,您需要以 dp
表示尺寸,然后將其轉(zhuǎn)換為像素。dp 單位轉(zhuǎn)換為屏幕像素很簡單:
px = dp * (dpi / 160)
假設(shè)在某一應(yīng)用中,用戶的手指至少移動 16 像素之后,系統(tǒng)會識別出滾動或滑動手勢,那么在基準(zhǔn)屏幕上,用戶的手指必須至少移動 16 pixels / 160 dpi
,相當(dāng)于 1 英寸的 1/10(2.5 毫米),相應(yīng)手勢才能被識別;而在配備高密度顯示屏 (240dpi) 的設(shè)備上,用戶的手指必須至少移動 16 pixels / 240 dpi
,相當(dāng)于 1 英寸的 1/15(1.7 毫米)。此距離短得多,因此用戶會感覺應(yīng)用在該設(shè)備上更靈敏。
要解決此問題,手勢閾值必須在代碼中以 dp
表示,然后再轉(zhuǎn)換為實際像素。例如:
DisplayMetrics.density
字段根據(jù)當(dāng)前像素密度指定將 dp
單位轉(zhuǎn)換為像素時必須使用的縮放系數(shù)。對于中密度屏幕,DisplayMetrics.density
等于 1.0;對于高密度屏幕,等于 1.5;對于超高密度屏幕,等于 2.0;對于低密度屏幕,等于 0.75。此數(shù)字是一個系數(shù),用其乘以 dp
單位,即可得出當(dāng)前屏幕的實際像素數(shù)。
您可以使用 ViewConfiguration
類來獲取 Android 系統(tǒng)常用的距離、速度和時間。例如,可通過 getScaledTouchSlop()
來獲取框架用作滾動閾值的距離(以像素為單位):
ViewConfiguration
中以 getScaled
為前綴的方法都會返回以像素為單位的值,無論當(dāng)前像素密度是多少,該值都會正確顯示。
6. 備用圖片的說明以及l(fā)dpi等說明:
表 1. 適用于不同像素密度的配置限定符。
密度限定符 | 說明 |
---|---|
ldpi | 適用于低密度 (ldpi) 屏幕 (~ 120dpi) 的資源。 |
mdpi | 適用于中密度 (mdpi) 屏幕 (~ 160dpi) 的資源(這是基準(zhǔn)密度)。 |
hdpi | 適用于高密度 (hdpi) 屏幕 (~ 240dpi) 的資源。 |
xhdpi | 適用于加高 (xhdpi) 密度屏幕 (~ 320dpi) 的資源。 |
xxhdpi | 適用于超超高密度 (xxhdpi) 屏幕 (~ 480dpi) 的資源。 |
xxxhdpi | 適用于超超超高密度 (xxxhdpi) 屏幕 (~ 640dpi) 的資源。 |
nodpi | 適用于所有密度的資源。這些是與密度無關(guān)的資源。無論當(dāng)前屏幕的密度是多少,系統(tǒng)都不會縮放以此限定符標(biāo)記的資源。 |
tvdpi | 適用于密度介于 mdpi 和 hdpi 之間的屏幕(約 213dpi)的資源。這不屬于“主要”密度組。它主要用于電視,而大多數(shù)應(yīng)用都不需要它。對于大多數(shù)應(yīng)用而言,提供 mdpi 和 hdpi 資源便已足夠,系統(tǒng)將視情況對其進(jìn)行縮放。如果您發(fā)現(xiàn)有必要提供 tvdpi 資源,應(yīng)按一個系數(shù)來確定其大小,即 1.33*mdpi。例如,如果某張圖片在 mdpi 屏幕上的大小為 100px x 100px,那么它在 tvdpi 屏幕上的大小應(yīng)該為 133px x 133px。 |
要針對不同的密度創(chuàng)建備用可繪制位圖資源,您應(yīng)遵循六種主要密度之間的 3:4:6:8:12:16 縮放比。例如,如果您有一個可繪制位圖資源,它在中密度屏幕上的大小為 48x48 像素,那么它在其他各種密度的屏幕上的大小應(yīng)該為:
7. 在AndroidStuido中使用矢量圖形
矢量圖形通常以 SVG(可縮放矢量圖形)文件的形式提供,但 Android 不支持此格式,因此您必須將 SVG 文件轉(zhuǎn)換為 Android 的矢量圖格式。
您可以在 Android Studio 中使用 Vector Asset Studio 輕松地將 SVG 轉(zhuǎn)換為矢量圖,具體步驟如下:
找到要導(dǎo)入的文件并進(jìn)行任何調(diào)整。
圖 3. 使用 Android Studio 導(dǎo)入 SVG 文件
您可能會注意到 Asset Studio 窗口中出現(xiàn)了一些錯誤,指出文件的某些屬性不受矢量圖支持。但這不會阻止您導(dǎo)入,只是會忽略不受支持的屬性。
點擊 Next。
在下一個屏幕上,確認(rèn)您希望從中查找項目文件的源集,然后點擊 Finish。
因為可以對所有像素密度使用一個矢量圖,所以此文件位于默認(rèn)的 drawable 目錄中(您不需要使用特定于密度的目錄):
res/ drawable/ ic_android_launcher.xml 如需詳細(xì)了解如何創(chuàng)建矢量圖形,請閱讀矢量圖文檔。