自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android適配難題全面總結(jié)

移動(dòng)開(kāi)發(fā) Android
Android 可在各種具有不同屏幕尺寸和密度的設(shè)備上運(yùn)行。對(duì)于 應(yīng)用,Android 系統(tǒng)在不同設(shè)備中提供一致的開(kāi)發(fā)環(huán)境, 可以處理大多數(shù)工作,將每個(gè)應(yīng)用的用戶(hù)界面調(diào)整為適應(yīng)其顯示的 屏幕。同時(shí),系統(tǒng)提供 API,可用于控制 應(yīng)用適用于特定屏幕尺寸和密度的 UI,以針對(duì) 不同屏幕配置優(yōu)化 UI 設(shè)計(jì)。

支持多種屏幕

Android 可在各種具有不同屏幕尺寸和密度的設(shè)備上運(yùn)行。對(duì)于 應(yīng)用,Android 系統(tǒng)在不同設(shè)備中提供一致的開(kāi)發(fā)環(huán)境, 可以處理大多數(shù)工作,將每個(gè)應(yīng)用的用戶(hù)界面調(diào)整為適應(yīng)其顯示的 屏幕。同時(shí),系統(tǒng)提供 API,可用于控制 應(yīng)用適用于特定屏幕尺寸和密度的 UI,以針對(duì) 不同屏幕配置優(yōu)化 UI 設(shè)計(jì)。例如,您可能想要不同于手機(jī) UI 的 平板電腦 UI。

雖然系統(tǒng)為使您的應(yīng)用適用于不同的屏幕, 會(huì)進(jìn)行縮放和大小調(diào)整,但您應(yīng)針對(duì)不同的屏幕尺寸和密度優(yōu)化 應(yīng)用。這樣可以最大程度優(yōu)化所有設(shè)備上的用戶(hù)體驗(yàn),用戶(hù)會(huì) 認(rèn)為您的應(yīng)用實(shí)際上是專(zhuān)為他們的設(shè)備而設(shè)計(jì),而不是 簡(jiǎn)單地拉伸以適應(yīng)其設(shè)備屏幕。

按照本文檔所述的做法,您可以創(chuàng)建 正常顯示的應(yīng)用,然后使用 一個(gè) .apk 文件在所有支持的屏幕配置中提供優(yōu)化的用戶(hù)體驗(yàn)。

注:本文檔中的信息假設(shè)您的 應(yīng)用設(shè)計(jì)用于 Android 1.6(API 級(jí)別 4)或更高級(jí)別。

另請(qǐng)注意,Android 3.2 引入了新的 API,可用于更 精確地控制應(yīng)用用于不同屏幕尺寸的布局資源。如果您要開(kāi)發(fā)針對(duì)平板電腦優(yōu)化的應(yīng)用,這些新 功能特別重要。

屏幕支持概覽

本節(jié)概述 Android 對(duì)多種屏幕的支持,包括: 本文檔和 API 中所用術(shù)語(yǔ)和概述的簡(jiǎn)介、 系統(tǒng)支持的屏幕配置摘要,以及 API 和基本 屏幕兼容性功能的概述。

術(shù)語(yǔ)和概念

屏幕尺寸

按屏幕對(duì)角測(cè)量的實(shí)際物理尺寸。

為簡(jiǎn)便起見(jiàn),Android 將所有實(shí)際屏幕尺寸分組為四種通用尺寸:小、 正常、大和超大。

屏幕密度

屏幕物理區(qū)域中的像素量;通常稱(chēng)為 dpi(每英寸 點(diǎn)數(shù))。例如, 與“正常”或“高”密度屏幕相比,“低”密度屏幕在給定物理區(qū)域的像素較少。

為簡(jiǎn)便起見(jiàn),Android 將所有屏幕密度分組為六種通用密度: 低、中、高、超高、超超高和超超超高。

方向

從用戶(hù)視角看屏幕的方向,即橫屏還是 豎屏,分別表示屏幕的縱橫比是寬還是高。請(qǐng)注意, 不僅不同的設(shè)備默認(rèn)以不同的方向操作,而且 方向在運(yùn)行時(shí)可隨著用戶(hù)旋轉(zhuǎn)設(shè)備而改變。

分辨率

屏幕上物理像素的總數(shù)。添加對(duì)多種屏幕的支持時(shí), 應(yīng)用不會(huì)直接使用分辨率;而只應(yīng)關(guān)注通用尺寸和密度組指定的屏幕 尺寸及密度。

密度無(wú)關(guān)像素 (dp)

在定義 UI 布局時(shí)應(yīng)使用的虛擬像素單位,用于以密度無(wú)關(guān)方式表示布局維度 或位置。

密度無(wú)關(guān)像素等于 160 dpi 屏幕上的一個(gè)物理像素,這是 系統(tǒng)為“中”密度屏幕假設(shè)的基線密度。在運(yùn)行時(shí),系統(tǒng) 根據(jù)使用中屏幕的實(shí)際密度按需要以透明方式處理 dp 單位的任何縮放 。dp 單位轉(zhuǎn)換為屏幕像素很簡(jiǎn)單: px = dp * (dpi / 160)。 例如,在 240 dpi 屏幕上,1 dp 等于 1.5 物理像素。在定義應(yīng)用的 UI 時(shí)應(yīng)始終使用 dp 單位 ,以確保在不同密度的屏幕上正常顯示 UI。

支持的屏幕范圍

從 Android 1.6(API 級(jí)別 4)開(kāi)始,Android 支持多種屏幕尺寸和密度,反映設(shè)備可能具有的多種不同屏幕配置。 您可以使用 Android 系統(tǒng)的功能優(yōu)化應(yīng)用在各種屏幕配置下的用戶(hù)界面 ,確保應(yīng)用不僅正常渲染,而且在每個(gè)屏幕上提供 最佳的用戶(hù)體驗(yàn)。

為簡(jiǎn)化您為多種屏幕設(shè)計(jì)用戶(hù)界面的方式,Android 將實(shí)際屏幕尺寸和密度的范圍 分為:

四種通用尺寸:小、正常、 大 和超大

注:從 Android 3.2(API 級(jí)別 13)開(kāi)始,這些尺寸組 已棄用,而采用根據(jù)可用屏幕寬度管理屏幕尺寸的 新技術(shù)。如果為 Android 3.2 和更高版本開(kāi)發(fā),請(qǐng)參閱聲明適用于 Android 3.2 的平板電腦布局以了解更多信息。

六種通用的密度:

ldpi(低)~120dpi

mdpi(中)~160dpi

hdpi(高)~240dpi

xhdpi(超高)~320dpi

xxhdpi(超超高)~480dpi

xxxhdpi(超超超高)~640dpi

通用的尺寸和密度按照基線配置(即正常尺寸和 mdpi(中)密度)排列。 此基線基于第一代 Android 設(shè)備 (T-Mobile G1) 的屏幕配置,該設(shè)備采用 HVGA 屏幕(在 Android 1.6 之前,這是 Android 支持的唯一屏幕配置)。

每種通用的尺寸和密度都涵蓋一個(gè)實(shí)際屏幕尺寸和密度范圍。例如, 兩部都報(bào)告正常屏幕尺寸的設(shè)備在手動(dòng)測(cè)量時(shí),實(shí)際屏幕尺寸和 高寬比可能略有不同。類(lèi)似地,對(duì)于兩臺(tái)報(bào)告 hdpi 屏幕密度的設(shè)備,其實(shí)際像素密度可能略有不同。 Android 將這些差異抽象概括到應(yīng)用,使您可以提供為通用尺寸和密度設(shè)計(jì)的 UI,讓系統(tǒng)按需要處理任何最終調(diào)整。 圖 1 說(shuō)明不同的尺寸和密度如何粗略歸類(lèi)為不同的尺寸 和密度組。   

Android 如何將實(shí)際尺寸和密度粗略地 對(duì)應(yīng)到通用的尺寸和密度 

圖 1. 說(shuō)明 Android 如何將實(shí)際尺寸和密度粗略地 對(duì)應(yīng)到通用的尺寸和密度(數(shù)據(jù)并不精確)。

在為不同的屏幕尺寸設(shè)計(jì) UI 時(shí),您會(huì)發(fā)現(xiàn)每種設(shè)計(jì)都需要 最小空間。因此,上述每種通用的屏幕尺寸都關(guān)聯(lián)了系統(tǒng)定義的最低 分辨率。這些最小尺寸以“dp”單位表示 — 在定義布局時(shí)應(yīng)使用相同的單位 — 這樣系統(tǒng)無(wú)需擔(dān)心屏幕密度的變化。

超大屏幕至少為 960dp x 720dp

大屏幕至少為 640dp x 480dp

正常屏幕至少為 470dp x 320dp

小屏幕至少為 426dp x 320dp

注:這些最小屏幕尺寸在 Android 3.0 之前未正確定義,因此某些設(shè)備在正常屏幕與大屏幕之間變換時(shí)可能會(huì)出現(xiàn)分類(lèi)錯(cuò)誤的情況。 這些尺寸還基于屏幕的物理分辨率,因此設(shè)備之間可能不同 — 例如,具有系統(tǒng)狀態(tài)欄的 1024×720 平板電腦因系統(tǒng)狀態(tài)欄要占用空間,所以可供 應(yīng)用使用的空間要小一點(diǎn)。

要針對(duì)不同的屏幕尺寸和密度優(yōu)化應(yīng)用的 UI,可為任何通用的尺寸和密度提供 替代 資源。通常,應(yīng)為某些不同的屏幕尺寸提供替代布局,為不同的屏幕密度提供替代位圖圖像。 在運(yùn)行時(shí),系統(tǒng)會(huì)根據(jù)當(dāng)前設(shè)備屏幕的通用 尺寸或密度對(duì)應(yīng)用使用適當(dāng)?shù)馁Y源。

無(wú)需為屏幕尺寸和 密度的每個(gè)組合提供替代資源。系統(tǒng)提供強(qiáng)大的兼容性功能,可處理在任何設(shè)備屏幕上 渲染應(yīng)用的大多數(shù)工作,前提是您已經(jīng)使用 可以適當(dāng)調(diào)整大小的技術(shù)實(shí)現(xiàn) UI(如下面的最佳做法所述)。

注:定義設(shè)備通用屏幕 尺寸和密度的特性相互獨(dú)立。例如,WVGA 高密度屏幕 被視為正常尺寸屏幕,因?yàn)槠湮锢沓叽缗c T-Mobile G1 (Android 的第一代設(shè)備和基線屏幕配置)大約相同。另一方面,WVGA 中密度 屏幕被視為大尺寸屏幕。雖然它提供相同的分辨率(相同的 像素?cái)?shù)),但 WVGA 中密度屏幕的屏幕密度更低,意味著每個(gè)像素 實(shí)際上更大,因此整個(gè)屏幕大于基線(正常尺寸)屏幕。

密度獨(dú)立性

應(yīng)用顯示在密度不同的屏幕上時(shí),如果它保持用戶(hù)界面元素的物理尺寸(從 用戶(hù)的視角),便可實(shí)現(xiàn)“密度獨(dú)立性” 。

保持密度獨(dú)立性很重要,因?yàn)槿绻麤](méi)有此功能,UI 元素(例如 按鈕)在低密度屏幕上看起來(lái)較大,在高密度屏幕上看起來(lái)較小。這些 密度相關(guān)的大小變化可能給應(yīng)用布局和易用性帶來(lái)問(wèn)題。圖 2 和 3 分別顯示了應(yīng)用不提供密度獨(dú)立性和 提供密度獨(dú)立性時(shí)的差異。   

不支持不同密度的示例應(yīng)用在低、中、高密度屏幕上的顯示情況 

圖 2. 不支持不同密度的示例應(yīng)用在低、中、高密度屏幕上的顯示情況。 

良好支持不同密度(密度獨(dú)立)的示例應(yīng)用在低、中、高密度屏幕上的顯示情況。 

圖 3. 良好支持不同密度(密度獨(dú)立)的示例應(yīng)用在低、中、高密度屏幕上的顯示情況。

Android 系統(tǒng)可幫助您的應(yīng)用以?xún)煞N方式實(shí)現(xiàn)密度獨(dú)立性:

系統(tǒng)根據(jù)當(dāng)前屏幕密度擴(kuò)展 dp 單位數(shù)

系統(tǒng)在必要時(shí)可根據(jù)當(dāng)前屏幕 密度將可繪制對(duì)象資源擴(kuò)展到適當(dāng)?shù)拇笮?/p>

在圖 2 中,文本視圖和位圖可繪制對(duì)象具有以像素(px 單位)指定的尺寸,因此視圖的物理尺寸在低密度屏幕上更大,在高密度 屏幕上更小。這是因?yàn)?,雖然實(shí)際屏幕尺寸可能相同,但高密度屏幕 的每英寸像素更多(同樣多的像素在一個(gè)更小的區(qū)域內(nèi))。在圖 3 中,布局 尺寸以密度獨(dú)立的像素(dp 單位)指定。由于 密度獨(dú)立像素的基線是中密度屏幕,因此具有中密度屏幕的設(shè)備看起來(lái) 與圖 2 一樣。但對(duì)于低密度和高密度屏幕,系統(tǒng) 將分別增加和減少密度獨(dú)立像素值,以適應(yīng) 屏幕。

大多數(shù)情況下,確保應(yīng)用中的屏幕獨(dú)立性很簡(jiǎn)單,只需以適當(dāng)?shù)拿芏泉?dú)立像素(dp 單位)或 “wrap_content” 指定所有 布局尺寸值。系統(tǒng)然后根據(jù)適用于當(dāng)前屏幕密度的縮放比例適當(dāng)?shù)乜s放位圖可繪制對(duì)象,以 適當(dāng)?shù)拇笮★@示。

但位圖縮放可能導(dǎo)致模糊或像素化位圖,您或許已經(jīng)在上面的屏幕截圖中 發(fā)現(xiàn)了這些問(wèn)題。為避免這些偽影,應(yīng)為 不同的密度提供替代的位圖資源。例如,應(yīng)為高密度 屏幕提供分辨率較高的位圖,然后系統(tǒng)對(duì)中密度 屏幕將使用這些位圖,而無(wú)需調(diào)整位圖大小。下一節(jié)詳細(xì)說(shuō)明如何為 不同的屏幕配置提供替代資源。

如何支持多種屏幕

Android 支持多種屏幕的基礎(chǔ)是它能夠管理針對(duì)當(dāng)前屏幕配置 以適當(dāng)方式渲染應(yīng)用的布局和位圖 可繪制對(duì)象。系統(tǒng)可處理大多數(shù)工作,通過(guò)適當(dāng)?shù)? 縮放布局以適應(yīng)屏幕尺寸/密度和根據(jù)屏幕密度縮放位圖可繪制對(duì)象 ,在每種屏幕配置中渲染您的應(yīng)用。但是,為了更適當(dāng)?shù)靥幚聿煌钠聊慌渲?,還應(yīng)該:

在清單中顯式聲明您的應(yīng)用 支持哪些屏幕尺寸

通過(guò)聲明您的應(yīng)用支持哪些屏幕尺寸,可確保只有 其屏幕受支持的設(shè)備才能下載您的應(yīng)用。聲明對(duì) 不同屏幕尺寸的支持也可影響系統(tǒng)如何在較大 屏幕上繪制您的應(yīng)用 — 特別是,您的應(yīng)用是否在屏幕兼容模式中運(yùn)行。

要聲明應(yīng)用支持的屏幕尺寸,應(yīng)在清單文件中包含 supports-screens 元素。

為不同屏幕尺寸提供不同的布局

默認(rèn)情況下,Android 會(huì)調(diào)整應(yīng)用布局的大小以適應(yīng)當(dāng)前設(shè)備屏幕。大多數(shù) 情況下效果很好。但有時(shí) UI 可能看起來(lái)不太好,需要針對(duì) 不同的屏幕尺寸進(jìn)行調(diào)整。例如,在較大屏幕上,您可能要調(diào)整 某些元素的位置和大小,以利用其他屏幕空間,或者在較小屏幕上, 可能需要調(diào)整大小以使所有內(nèi)容納入屏幕。

可用于提供尺寸特定資源的配置限定符包括 small、normal、large 和 xlarge。例如,超大屏幕的布局應(yīng)使用 layout-xlarge/。

從 Android 3.2(API 級(jí)別 13)開(kāi)始,以上尺寸組已棄用,您 應(yīng)改為使用 swdp 配置限定符來(lái)定義布局資源 可用的最小寬度。例如,如果多窗格平板電腦布局 需要至少 600dp 的屏幕寬度,應(yīng)將其放在 layout-sw600dp/ 中。聲明適用于 Android 3.2 的平板電腦布局一節(jié)將進(jìn)一步討論如何使用新技術(shù)聲明布局資源。

為不同屏幕密度提供不同的位圖可繪制對(duì)象

默認(rèn)情況下,Android 會(huì)縮放位圖可繪制對(duì)象(.png、.jpg 和 .gif 文件)和九宮格可繪制對(duì)象(.9.png 文件),使它們以適當(dāng)?shù)? 物理尺寸顯示在每部設(shè)備上。例如,如果您的應(yīng)用只為 基線中密度屏幕 (mdpi) 提供位圖可繪制對(duì)象,則在高密度 屏幕上會(huì)增大位圖,在低密度屏幕上會(huì)縮小位圖。這種縮放可能在 位圖中造成偽影。為確保位圖的最佳顯示效果,應(yīng)針對(duì) 不同屏幕密度加入不同分辨率的替代版本。

可用于密度特定資源的配置限定符(在下面詳述) 包括 ldpi(低)、mdpi(中)、 hdpi(高)、xhdpi(超高)、xxhdpi (超超高)和 xxxhdpi(超超超高)。例如,高密度屏幕的位圖應(yīng)使用 drawable-hdpi/。

注:僅當(dāng)要在 xxhdpi 設(shè)備上提供比正常位圖大的啟動(dòng)器圖標(biāo)時(shí)才需要提供 mipmap-xxxhdpi 限定符。無(wú)需為所有應(yīng)用的圖像提供 xxxhdpi 資源。

有些設(shè)備會(huì)將啟動(dòng)器圖標(biāo)增大 25%。例如,如果您的最高 密度啟動(dòng)器圖標(biāo)已是超超高密度,縮放處理會(huì)降低其 清晰度。因此應(yīng)在 mipmap-xxxhdpi 目錄中提供更高密度的啟動(dòng)器圖標(biāo),系統(tǒng)將改為增大較小 的圖標(biāo)。

請(qǐng)參閱提供 xxx-高密度啟動(dòng)器圖標(biāo)以了解詳細(xì)信息。對(duì)啟動(dòng)程序圖標(biāo)以外的 UI 元素不應(yīng)使用 xxxhdpi 限定符。

注:將您的所有啟動(dòng)器圖標(biāo)放在 res/mipmap-[density]/ 文件夾中,而非 res/drawable-[density]/ 文件夾中。無(wú)論安裝應(yīng)用的設(shè)備屏幕分辨率如何,Android 系統(tǒng)都會(huì)將資源保留在這些密度特定的文件夾中,例如 mipmap-xxxhdpi。此 行為可讓啟動(dòng)器應(yīng)用為您的應(yīng)用選擇要顯示在主 屏幕上的最佳分辨率圖標(biāo)。如需了解有關(guān)使用 mipmap 文件夾的詳細(xì)信息,請(qǐng)參閱管理項(xiàng)目概覽。

尺寸和密度配置限定符對(duì)應(yīng)于 前面支持的屏幕范圍中所述的通用尺寸和密度。

在運(yùn)行時(shí),系統(tǒng)通過(guò) 以下程序確保任何給定資源在當(dāng)前屏幕上都能保持盡可能最佳的顯示效果:

系統(tǒng)使用適當(dāng)?shù)奶娲Y源

根據(jù)當(dāng)前屏幕的尺寸和密度,系統(tǒng)將使用您的應(yīng)用中提供的任何尺寸和 密度特定資源。例如,如果設(shè)備有 高密度屏幕,并且應(yīng)用請(qǐng)求可繪制對(duì)象資源,系統(tǒng)將查找 與設(shè)備配置最匹配的可繪制對(duì)象資源目錄。根據(jù)可用的其他 替代資源,包含 hdpi 限定符(例如 drawable-hdpi/)的資源目錄可能是最佳匹配項(xiàng),因此系統(tǒng)將使用此 目錄中的可繪制對(duì)象資源。

如果沒(méi)有匹配的資源,系統(tǒng)將使用默認(rèn)資源,并按需要向上 或向下擴(kuò)展,以匹配當(dāng)前的屏幕尺寸和密度。

“默認(rèn)”資源是指未標(biāo)記配置限定符的資源。例如,drawable/ 中的資源是默認(rèn)可繪制資源。 系統(tǒng)假設(shè)默認(rèn)資源設(shè)計(jì)用于基線屏幕尺寸和密度,即 正常屏幕尺寸和中密度。 因此,系統(tǒng)對(duì)于高密度屏幕向上擴(kuò)展默認(rèn)密度 資源,對(duì)于低密度屏幕向下擴(kuò)展。

當(dāng)系統(tǒng)查找密度特定的資源但在 密度特定目錄中未找到時(shí),不一定會(huì)使用默認(rèn)資源。系統(tǒng)在縮放時(shí)可能 改用其他密度特定資源提供更好的 效果。例如,查找低密度資源但該資源不可用時(shí), 系統(tǒng)會(huì)縮小資源的高密度版本,因?yàn)?系統(tǒng)可輕松以 0.5 為系數(shù)將高密度資源縮小至低密度資源,與以 0.75 為系數(shù) 縮小中密度資源相比,偽影更少。

如需有關(guān) Android 如何通過(guò)使配置 限定符與設(shè)備配置匹配來(lái)選擇替代資源的更多信息,請(qǐng)參閱 Android 如何 查找最佳匹配資源。

使用配置限定符

Android 支持多種配置限定符,可讓您控制系統(tǒng) 如何根據(jù)當(dāng)前設(shè)備屏幕的特性選擇替代資源。配置限定符是可以附加到 Android 項(xiàng)目中資源目錄的字符串,用于指定在其中設(shè)計(jì)資源的配置。

要使用配置限定符:

在項(xiàng)目的 res/ 目錄中新建一個(gè)目錄,并使用以下 格式命名: <resources_name>-<qualifier>

<resources_name> 是標(biāo)準(zhǔn)資源名稱(chēng)(例如 drawable 或 layout)。

<qualifier> 是下表 1 中的配置限定符,用于指定 要使用這些資源的屏幕配置(例如 hdpi 或 xlarge)。

您可以一次使用多個(gè) <qualifier> — 只需使用短劃線分隔每個(gè) 限定符。

將適當(dāng)?shù)呐渲锰囟ㄙY源保存在此新目錄下。這些資源 文件的名稱(chēng)必須與默認(rèn)資源文件完全一樣。

例如,xlarge 是超大屏幕的配置限定符。將 此字符串附加到資源目錄名稱(chēng)(例如 layout-xlarge)時(shí),它指向 要在具有超大屏幕的設(shè)備上使用這些資源的系統(tǒng)。

表 1. 可用于為 不同屏幕配置提供特殊資源的配置限定符。 

屏幕特性 限定符 說(shuō)明

尺寸 small 適用于小尺寸屏幕的資源。

normal 適用于正常尺寸屏幕的資源。(這是基線尺寸。)

large 適用于大尺寸屏幕的資源。

xlarge 適用于超大尺寸屏幕的資源。

密度 ldpi 適用于低密度 (ldpi) 屏幕 (~120dpi) 的資源。

mdpi 適用于中密度 (mdpi) 屏幕 (~160dpi) 的資源。(這是基線 密度。)

hdpi 適用于高密度 (hdpi) 屏幕 (~240dpi) 的資源。

xhdpi 適用于超高密度 (xhdpi) 屏幕 (~320dpi) 的資源。

xxhdpi 適用于超超高密度 (xxhdpi) 屏幕 (~480dpi) 的資源。

xxxhdpi 適用于超超超高密度 (xxxhdpi) 屏幕 (~640dpi) 的資源。此限定符僅適用于 啟動(dòng)器圖標(biāo),請(qǐng)參閱上面的注。

nodpi 適用于所有密度的資源。這些是密度獨(dú)立的資源。不管當(dāng)前屏幕的密度如何,系統(tǒng)都不會(huì) 縮放以此限定符標(biāo)記的資源。

tvdpi 適用于密度介于 mdpi 和 hdpi 之間屏幕(約為 213dpi)的資源。它并不是 “主要”密度組,主要用于電視,而大多數(shù)應(yīng)用都不 需要它 — 對(duì)于大多數(shù)應(yīng)用而言,提供 mdpi 和 hdpi 資源便已足夠,系統(tǒng)將根據(jù)需要對(duì)其進(jìn)行 縮放。如果發(fā)現(xiàn)必須提供 tvdpi 資源,應(yīng)以 1.33*mdpi 的系數(shù) 調(diào)整其大小。例如,mdpi 屏幕的 100px x 100px 圖像應(yīng)該相當(dāng)于 tvdpi 的 133px x 133px。

方向 land 適用于橫屏(長(zhǎng)寬比)的資源。

方向port 適用于豎屏(高寬比)的資源。

縱橫比 long 適用于縱橫比明顯高于或?qū)捰?分別在豎屏 或橫屏?xí)r)基線屏幕配置的屏幕的資源。

notlong 適用于使用縱橫比類(lèi)似于基線屏幕 配置的屏幕的資源。

 注:如果是為 Android 3.2 和 更高版本開(kāi)發(fā)應(yīng)用,請(qǐng)參閱有關(guān)聲明適用于 Android 3.2 的平板電腦布局的章節(jié),了解 在為特定屏幕尺寸聲明布局資源時(shí)應(yīng)使用的 新配置限定符(而不是使用表 1 中的尺寸限定符)。

如需了解有關(guān)這些限定符如何粗略地對(duì)應(yīng)于實(shí)際屏幕 尺寸和密度的更多信息,請(qǐng)參閱本文檔前面的支持的屏幕范圍 。

例如,以下應(yīng)用資源目錄 為不同屏幕尺寸和不同可繪制對(duì)象提供不同的布局設(shè)計(jì)。使用 mipmap/ 文件夾放置 啟動(dòng)器圖標(biāo)。

  1. res/layout/my_layout.xml // layout for normal screen size (“default”) 
  2. res/layout-large/my_layout.xml // layout for large screen size 
  3. res/layout-xlarge/my_layout.xml // layout for extra-large screen size 
  4. res/layout-xlarge-land/my_layout.xml // layout for extra-large in landscape orientation 
  5. res/drawable-mdpi/graphic.png // bitmap for medium-density 
  6. res/drawable-hdpi/graphic.png // bitmap for high-density 
  7. res/drawable-xhdpi/graphic.png // bitmap for extra-high-density 
  8. res/drawable-xxhdpi/graphic.png // bitmap for extra-extra-high-density 
  9. res/mipmap-mdpi/my_icon.png // launcher icon for medium-density 
  10. res/mipmap-hdpi/my_icon.png // launcher icon for high-density 
  11. res/mipmap-xhdpi/my_icon.png // launcher icon for extra-high-density 
  12. res/mipmap-xxhdpi/my_icon.png // launcher icon for extra-extra-high-density 
  13. res/mipmap-xxxhdpi/my_icon.png // launcher icon for extra-extra-extra-high-density  

請(qǐng)注意,當(dāng) Android 系統(tǒng)在運(yùn)行時(shí)選擇使用哪些資源時(shí),它會(huì)使用 特定邏輯確定“最佳匹配”資源。也就是說(shuō),您使用的限定符無(wú) 需在所有情況下精確匹配當(dāng)前屏幕配置,系統(tǒng)也可 使用它們。特別是,根據(jù)屏幕尺寸限定符選擇資源時(shí),如果沒(méi)有更好的匹配資源,則系統(tǒng)將 使用專(zhuān)為小于當(dāng)前屏幕的屏幕而設(shè)計(jì)的 資源(例如,如有必要,大尺寸屏幕將使用標(biāo)準(zhǔn)尺寸的屏幕 資源)。但是,如果唯一可用的資源大于當(dāng)前屏幕, 則系統(tǒng)不會(huì)使用這些資源,并且如果沒(méi)有其他資源與設(shè)備 配置匹配,應(yīng)用將會(huì)崩潰(例如,如果所有布局資源均用 xlarge 限定符標(biāo)記, 但設(shè)備是標(biāo)準(zhǔn)尺寸的屏幕)。

提示:如果您有一些系統(tǒng) 應(yīng)該永遠(yuǎn)不會(huì)縮放(或許是因?yàn)槟?運(yùn)行時(shí)親自對(duì)圖像做一些調(diào)整)的可繪制對(duì)象資源,則應(yīng)將它們放在有 nodpi 配置限定符的目錄中。 使用此限定符的資源被視為與密度無(wú)關(guān),系統(tǒng)不會(huì)縮放 它們。

設(shè)計(jì)替代布局和可繪制對(duì)象

您應(yīng)該創(chuàng)建的替代資源類(lèi)型取決于應(yīng)用的需求。 通常,您應(yīng)該使用尺寸和方向限定符提供替代布局資源 ,并且使用密度限定符提供替代位圖可繪制對(duì)象資源。

以下各節(jié)摘要說(shuō)明您可能要如何使用尺寸和密度限定符 來(lái)分別提供替代布局和可繪制對(duì)象。

替代布局

一般而言,在不同的屏幕配置上測(cè)試應(yīng)用后,您會(huì)知道 是否需要用于不同屏幕尺寸的替代布局。例如:

在小屏幕上測(cè)試時(shí),可能會(huì)發(fā)現(xiàn)您的布局不太適合 屏幕。例如,小屏幕設(shè)備的屏幕寬度可能無(wú)法容納一排 按鈕。在此情況下,您應(yīng)該為小屏幕提供調(diào)整 按鈕大小或位置的替代布局。

在超大屏幕上測(cè)試時(shí),可能會(huì)發(fā)現(xiàn)您的布局無(wú)法 有效地利用大屏幕,并且明顯拉伸填滿(mǎn)屏幕。 在此情況下,您應(yīng)該為超大屏幕提供替代布局,以提供 針對(duì)大屏幕(例如平板電腦)優(yōu)化、重新設(shè)計(jì)的 UI。

雖然您的應(yīng)用不使用替代布局也能在大屏幕上正常運(yùn)行,但 必須讓用戶(hù)感覺(jué)您的應(yīng)用看起來(lái)像是專(zhuān)為其 設(shè)備而設(shè)計(jì)。如果 UI 明顯拉伸,用戶(hù)很可能對(duì) 應(yīng)用體驗(yàn)不滿(mǎn)意。

而且,對(duì)比橫屏測(cè)試和豎屏測(cè)試時(shí) 可能會(huì)發(fā)現(xiàn),豎屏?xí)r置于底部的 UI 在橫屏?xí)r應(yīng)位于屏幕右側(cè)。

簡(jiǎn)而言之,您應(yīng)確保應(yīng)用布局:

適應(yīng)小屏幕(讓用戶(hù)能實(shí)際使用您的應(yīng)用)

已針對(duì)大屏幕優(yōu)化,可以利用其他屏幕空間

已同時(shí)針對(duì)橫屏和豎屏方向優(yōu)化

如果 UI 使用的位圖即使在系統(tǒng)縮放 布局后也需要適應(yīng)視圖大小(例如按鈕的背景圖片),則應(yīng)使用九宮格位圖文件。九宮格文件基本上是一個(gè)指定可拉伸的二維區(qū)域的 PNG 文件。 當(dāng)系統(tǒng)需要縮放使用位圖的視圖時(shí),系統(tǒng) 會(huì)拉伸九宮格位圖,但只拉伸指定的區(qū)域。因此,您無(wú) 需為不同的屏幕尺寸提供不同的可繪制對(duì)象,因?yàn)榫艑m格位圖可 調(diào)整至任何大小。但您應(yīng)該為不同的屏幕密度提供 九宮格文件的替代版本。

替代可繪制對(duì)象

 

 

支持每種密度的 位圖可繪制對(duì)象的相對(duì)大小。 

圖 4. 支持每種密度的 位圖可繪制對(duì)象的相對(duì)大小。

基本上每個(gè)應(yīng)用都應(yīng)該具有不同密度的替代可繪制對(duì)象 資源,因?yàn)榛旧厦總€(gè)應(yīng)用都有啟動(dòng)器圖標(biāo),而且該圖標(biāo)應(yīng)該在 所有屏幕密度中看起來(lái)都很好。同樣,如果您的應(yīng)用中包含其他位圖可繪制對(duì)象(例如 應(yīng)用中的菜單圖標(biāo)或其他圖形),則應(yīng)該為不同密度提供替代版本或 每種密度一個(gè)版本。

注:您只需要為 位圖文件(.png、.jpg 或 .gif)和九宮格文件 (.9.png) 提供密度特定的可繪制對(duì)象。如果您使用 XML 文件定義形狀、顏色或其他可繪制對(duì)象資源,應(yīng)該 將一個(gè)副本放在默認(rèn)可繪制對(duì)象目錄中 (drawable/)。

要為不同的密度創(chuàng)建替代位圖可繪制對(duì)象,應(yīng)遵循六種通用密度之間的 3:4:6:8:12:16 縮放比率。例如,如果您的 位圖可繪制對(duì)象是對(duì)中密度屏幕使用 48×48 像素,則所有不同的尺寸應(yīng)為:

36×36 (0.75x) 用于低密度

48×48(1.0x 基線)用于中密度

72×72 (1.5x) 用于高密度

96×96 (2.0x) 用于超高密度

144×144 (3.0x) 用于超超高密度

192×192 (4.0x) 用于超超超高密度(僅限啟動(dòng)器圖標(biāo);請(qǐng)參閱上面的 注)

如需了解有關(guān)設(shè)計(jì)圖標(biāo)的更多信息,請(qǐng)參閱圖標(biāo)設(shè)計(jì)指南, 其中包含各種位圖可繪制對(duì)象(例如啟動(dòng)器圖標(biāo)、菜單 圖標(biāo)、狀態(tài)欄圖標(biāo)、選項(xiàng)卡圖標(biāo)等)的大小信息。

聲明適用于 Android 3.2 的平板電腦布局

對(duì)于第一代運(yùn)行 Android 3.0 的平板電腦,聲明平板電腦 的正確方式是將它們放在有 xlarge 配置限定符的目錄(例如 res/layout-xlarge/)中。為適應(yīng)其他類(lèi)型的平板電腦和屏幕 尺寸 — 特別是 7 英寸平板電腦 — Android 3.2 引入了為更具體的屏幕尺寸指定資源 的新方式。新技術(shù)基于布局需要的空間量 (例如 600dp 寬),而不是嘗試讓您的布局容納通用化的尺寸組 (例如大或超大)。

使用通用化的尺寸組時(shí),為 7 英寸平板電腦設(shè)計(jì)很棘手的原因在于, 7 英寸平板電腦在技術(shù)上與 5 英寸手機(jī)屬于同一個(gè)組(大組)。雖然 這兩種設(shè)備在尺寸上似乎很接近,但用于 應(yīng)用 UI 的空間量明顯不同,用戶(hù)交互的方式也是如此。因此,7 英寸和 5 英寸 屏幕不一定使用相同的布局。為便于您為這兩種屏幕提供不同的 布局,Android 現(xiàn)在允許您 根據(jù)實(shí)際適用于應(yīng)用布局的寬度和/或高度指定布局資源( 以 dp 單位數(shù)指定)。

例如,在設(shè)計(jì)要用于平板電腦樣式設(shè)備的布局之后,您可能 發(fā)現(xiàn)該布局在屏幕寬度小于 600dp 時(shí)不適用。此閾值 于是變成平板電腦布局需要的最小尺寸。因此,您現(xiàn)在可以指定應(yīng)僅當(dāng)至少有 600dp 寬度供應(yīng)用的 UI 使用時(shí)才使用這些布局資源。

應(yīng)選擇一個(gè)寬度并將其設(shè)計(jì)為最小尺寸,或者在布局設(shè)計(jì)完成后測(cè)試 其支持的最小寬度。

注:請(qǐng)記住,這些新尺寸 API 使用的所有數(shù)據(jù)是密度獨(dú)立的像素 (dp) 值,您的布局尺寸也應(yīng)始終 使用 dp 單位定義,因?yàn)槟P(guān)注的是系統(tǒng) 考慮屏幕密度后可用的屏幕空間量(與使用原始像素分辨率相反)。如需了解 密度獨(dú)立像素的更多信息,請(qǐng)參閱本文檔前面的術(shù)語(yǔ)和概念 。

使用新尺寸限定符

因?yàn)槲⑿抛謹(jǐn)?shù)限制,請(qǐng)點(diǎn)擊左下角原文鏈接閱讀完整內(nèi)容。

責(zé)任編輯:龐桂玉 來(lái)源: Android開(kāi)發(fā)中文站
相關(guān)推薦

2009-11-05 15:58:37

無(wú)線接入點(diǎn)

2015-08-31 15:07:12

VDSLFTTH寬帶

2009-08-05 09:48:12

JSP學(xué)習(xí)經(jīng)驗(yàn)

2012-08-09 09:11:32

PHP超時(shí)

2009-09-16 11:19:48

Linq Select

2015-06-30 10:59:22

MobileWeb適配

2009-09-25 10:03:51

Java泛型

2018-04-12 14:56:49

Android劉海屏技巧

2017-11-13 16:35:36

iPhone X全面屏APP

2013-05-22 09:49:36

2024-07-26 10:35:00

2024-09-04 09:43:36

2013-07-10 09:56:02

軟件定義網(wǎng)絡(luò)SDN

2009-12-21 13:34:41

OSGi

2010-03-09 14:30:45

Linux全部硬件信息

2024-05-31 13:34:57

2018-07-26 15:16:50

小程序iPhone X甜酸

2024-08-29 10:23:42

2024-11-06 09:54:58

SpringJava開(kāi)發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)