日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android的屏幕多样性支持

發(fā)布時(shí)間:2023/12/20 Android 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android的屏幕多样性支持 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文作者:Google
原文地址:http://developer.android.com/guide/practices/screens_support.html
原文版權(quán):Creative Commons 2.5 Attribution License
譯文作者:Jianan - qinxiandiqi@foxmail.com
版本信息:本文基于2015-10-20版本翻譯
譯文版權(quán):CC BY-NC-ND 4.0,允許復(fù)制轉(zhuǎn)載,但必須保留譯文作者署名及譯文鏈接,不得演繹和用于商業(yè)用途


前言


運(yùn)行Android系統(tǒng)設(shè)備的屏幕尺寸和密度千變?nèi)f化。然而對(duì)于應(yīng)用程序來說,Android系統(tǒng)為所有設(shè)備提供了一個(gè)統(tǒng)一的開發(fā)環(huán)境,并且由系統(tǒng)處理了大部分應(yīng)用程序界面與實(shí)際屏幕的適配工作。同時(shí),系統(tǒng)也提供了相應(yīng)的API允許你在特定的屏幕尺寸或屏幕密度上為你的應(yīng)用程序UI做特定的調(diào)整,以便在不同配置的屏幕上優(yōu)化你的UI。例如,你可能需要在平板和手機(jī)上顯示不一樣的UI效果。

盡管系統(tǒng)能夠自動(dòng)將你的應(yīng)用程序UI通過縮放或重置大小來適配不同的屏幕,但你仍然需要為你的應(yīng)用程序適配不同尺寸和密度的屏幕做一點(diǎn)優(yōu)化工作。這樣,你才能夠最大程度優(yōu)化不同設(shè)備上的用戶體驗(yàn),讓你的用戶相信你的應(yīng)用就是為他們的設(shè)備設(shè)計(jì)的,而不是通過簡(jiǎn)單的UI拉伸來填充他們的設(shè)備屏幕。

通過本文介紹的方法,你能夠創(chuàng)建一個(gè)顯示正確的應(yīng)用程序,并且簽名打包出一個(gè)在其所有支持的設(shè)備屏幕上都能獲得優(yōu)越用戶體驗(yàn)的apk文件。

注意: 本文所有內(nèi)容都假定你的應(yīng)用程序只支持Android 1.6(API Level 4)或者更高的Android版本。如果你的應(yīng)用程序需要支持Android 1.5或者更低的版本,請(qǐng)先閱讀Strategies for Android 1.5.

另外,要知道從Android 3.2開始引入了很多新的API,這些API能夠讓你為不同屏幕尺寸更好的調(diào)整應(yīng)用程序所使用的layout資源。如果你開發(fā)的應(yīng)用需要針對(duì)平板進(jìn)行優(yōu)化,這些新特性就更加重要。更多的細(xì)節(jié)可以參考下面Declaring Table Layouts for Android 3.2章節(jié)。


屏幕支持概覽(Overview of Screens Support)


本章節(jié)為Android支持多樣屏幕的概述。包括對(duì)本文檔或API中涉及的術(shù)語及概念進(jìn)行介紹說明,對(duì)Android系統(tǒng)所支持的屏幕配置屬性的總結(jié),以及API和底層屏幕兼容特性的概述。

2.1 術(shù)語及概念(Terms and concepts)

2.1.1 Screen size(屏幕尺寸)

實(shí)際的物理尺寸,根據(jù)屏幕的對(duì)角線來測(cè)量。

為了簡(jiǎn)單起見,Android將全部屏幕尺寸歸類成4種通用尺寸:small、normal、large、extra-large。

2.1.2 Screen density(屏幕密度)

指的是屏幕上一個(gè)物理單位區(qū)域中的像素?cái)?shù)量,通常使用dpi(每英寸多少點(diǎn))為單位。例如,相對(duì)于“normal”或者“high”密度的屏幕,在相同物理區(qū)域上“l(fā)ow”密度的屏幕擁有的像素要更少。

為了簡(jiǎn)單起見,Android將全部屏幕密度歸類成6中通用密度:low、medium、high、extra-hight、extra-extra-high、extra-extra-extra-high。

2.1.3 Orientation(屏幕方向)

屏幕的方向是從用戶的視覺角度來說的。屏幕方向不是landscape(橫向)就是portrait(豎向),分別意味著屏幕的寬高比更寬或者更高。注意不單要做不同屏幕的適配,還要做同一個(gè)屏幕不同方向情況下的適配,因?yàn)槿绻脩粼趹?yīng)用程序運(yùn)行的過程中旋轉(zhuǎn)設(shè)備可能會(huì)引起屏幕方向的改變。

2.1.4 Resolution(分辨率)

表示一塊屏幕上總的物理像素?cái)?shù)量。當(dāng)支持多樣屏幕適配的時(shí)候,應(yīng)用程序不直接使用分辨率,應(yīng)用程序應(yīng)當(dāng)使用上文所說的系統(tǒng)通用尺寸和通用密度類別,只需關(guān)心屏幕尺寸和密度就可以了。

2.1.5 Density-independent pixel(dp,密度無關(guān)的像素)

一種虛擬的像素單位。當(dāng)你在UI的layout資源中定義layout的尺寸或位置的時(shí)候,你應(yīng)當(dāng)使用這種虛擬像素單位。

1個(gè)單位的虛擬像素等于160dpi屏幕上的一個(gè)物理像素點(diǎn),這也是系統(tǒng)將“medium”屏幕密度作為基準(zhǔn)密度的原因。在運(yùn)行的時(shí)候,如果有需要,系統(tǒng)會(huì)基于實(shí)際屏幕的密度對(duì)dp單位進(jìn)行縮放。dp單位和實(shí)際屏幕px像素單位的轉(zhuǎn)換很簡(jiǎn)單:px = dp * (dpi/160)。例如,在240dpi的屏幕上,1dp等于1.5px。當(dāng)你定義應(yīng)用程序UI的時(shí)候,你應(yīng)當(dāng)使用dp來保證你的UI能夠正確顯示在不同的屏幕上。

2.2 屏幕支持的范圍(Range of screens supported)

從Android 1.6(API Level 4)開始,Android提供了多種屏幕尺寸和密度的支持,以對(duì)應(yīng)不同的設(shè)備屏幕配置。你可以使用系統(tǒng)提供的這些功能針對(duì)每一種屏幕配置優(yōu)化你的應(yīng)用程序界面,確保你的應(yīng)用程序能夠在每一種屏幕上提供最好的用戶體驗(yàn),而不單單只是基本正常顯示。

為了簡(jiǎn)化你為不同屏幕適配用戶界面的工作,Android將實(shí)際的屏幕尺寸和密度歸類為如下:

  • 4種通用的尺寸:smallnormallargexlarge

注意: 從Android 3.2(API Level 13)開始,這些尺寸分類已經(jīng)被棄用,以便于基于可用屏幕寬度來管理屏幕尺寸這種新技術(shù)的實(shí)現(xiàn)。如果你是為Android 3.2或更高版本的系統(tǒng)開發(fā),請(qǐng)參考下面 Declaring Tablet Layouts for Android 3.2 章節(jié)獲取更多信息。

  • 6種通用密度:
    • ldpi(low) ~ 120dpi
    • mdpi(medium) ~ 160dpi
    • hdpi(high) ~ 240dpi
    • xhdpi(extra-hight) ~ 320dpi
    • xxhdpi(extra-extra-high) ~ 480dpi
    • xxxhdpi(extra-extra-extra-high) ~ 640dpi

這些通用尺寸和通用密度全部都是以normal尺寸和mdpi密度作為基準(zhǔn)來調(diào)整的。之所以使用這個(gè)基準(zhǔn)是因?yàn)檫@是第一部Android設(shè)備T-Mobile G1的屏幕配置,也就是HVGA屏幕(直到Android 1.6之前,這都是Android唯一支持的屏幕配置)。

每一套通用尺寸和通用密度都會(huì)覆蓋一定范圍的真實(shí)屏幕尺寸和密度。例如,兩臺(tái)設(shè)備都要求使用normal尺寸,但實(shí)際上手動(dòng)測(cè)量?jī)膳_(tái)設(shè)備屏幕的真實(shí)尺寸和縱橫比會(huì)稍稍不同。同樣的,兩個(gè)設(shè)備都要求使用hdpi密度,但實(shí)際上兩臺(tái)設(shè)備的像素密度稍稍不同。Android系統(tǒng)會(huì)將這些差異抽象化,因此你可以直接提供通用尺寸或者通用密度的UI,讓系統(tǒng)在有需要的時(shí)候自動(dòng)進(jìn)行校準(zhǔn)。下圖粗略的展示了不同的尺寸和密度與通用尺寸和通用密度的對(duì)應(yīng)關(guān)系:

圖1 真實(shí)尺寸與密度和通用尺寸通用密度對(duì)應(yīng)的大致范圍(注意圖中數(shù)字是不太準(zhǔn)確的)

當(dāng)你為不同的屏幕尺寸設(shè)計(jì)UI的時(shí)候,你會(huì)發(fā)現(xiàn)每一種都有最小的空間值限制。因此,系統(tǒng)對(duì)上面提到的每一種通用屏幕尺寸都定義了相關(guān)聯(lián)的最小解析度。最小的尺寸為1dp,dp是你定義layout的時(shí)候應(yīng)該使用的單位,使用這個(gè)單位才能讓系統(tǒng)處理UI因屏幕密度不同引起的變化。

  • xlarge屏幕最小解析度為960dp*720dp
  • large屏幕最小解析度為640dp*480dp
  • normal屏幕最小解析度為470dp*320dp
  • small屏幕最小解析度為426dp*320dp

注意: 這些最小屏幕解析度在Android 3.0之前的版本上并沒有明確定義,因此,你可能會(huì)發(fā)現(xiàn)一些設(shè)備的屏幕尺寸在normal和large之間被錯(cuò)誤歸類了。另外,這些解析度也基于屏幕的物理解析度,所以每臺(tái)設(shè)備都各不相同——例如一部1024*720的平板使用了系統(tǒng)欄后留給應(yīng)用程序的可用空間會(huì)更少,因?yàn)椴糠挚臻g被系統(tǒng)欄占用了。

為不同的屏幕尺寸和屏幕密度優(yōu)化你的應(yīng)用程序UI,你可以為一些通用尺寸和通用密度提供替換的資源。通常情況下,你應(yīng)該為不同尺寸的屏幕提供可替換的layout資源,以及為不同密度的屏幕提供可替換的圖片資源。在運(yùn)行的時(shí)候,系統(tǒng)會(huì)將當(dāng)前設(shè)備的屏幕與通用尺寸或通用密度進(jìn)行對(duì)比,自動(dòng)為你的應(yīng)用程序選擇合適的資源。

你不需要為每一種通用屏幕尺寸和通用屏幕密度的組合都提供一套可替換的資源。系統(tǒng)提供了強(qiáng)大的兼容功能,能夠?qū)⒛愕膽?yīng)用程序渲染到不同設(shè)備屏幕上并處理大部分的問題。但前提是你在實(shí)現(xiàn)你的UI時(shí)已經(jīng)使用了相關(guān)的技術(shù),這樣才能使系統(tǒng)優(yōu)雅的調(diào)整UI大小(詳細(xì)請(qǐng)查看下面獨(dú)立密度章節(jié))。

注意: 一臺(tái)設(shè)備的通用屏幕尺寸和通用屏幕密度的特性之間是相互獨(dú)立的。例如,一塊WVGA的high密度屏幕將會(huì)使用normal屏幕尺寸,因?yàn)樗奈锢沓叽缗cT-Mobile G1一樣(第一部Android設(shè)備,也是屏幕配置分類的基準(zhǔn))。另一方面,一塊WVGA的medium密度屏幕將會(huì)使用large屏幕尺寸。盡管它們的解析度是相同的(總像素相同),但是這塊WVGA medium密度的屏幕密度比較低,這意味著它的像素點(diǎn)物理尺寸更大,因此才會(huì)使整塊屏幕比基準(zhǔn)屏幕(normal尺寸的屏幕)更大。

2.3 獨(dú)立的密度(Density independence)

當(dāng)你的應(yīng)用程序?qū)崿F(xiàn)“密度獨(dú)立”時(shí),即使是在不同密度的屏幕上,你的UI元素也將保留同樣的物理尺寸(從用戶的角度來看)。

保持密度獨(dú)立是一件重要的事情,因?yàn)槿绻麤]有保持密度獨(dú)立,一個(gè)UI元素(例如一個(gè)按鈕)將會(huì)在低密度屏幕上顯示的很大,而在高密度屏幕上顯示的很小。像這樣密度相關(guān)的尺寸如果一改變,就會(huì)導(dǎo)致你的應(yīng)用程序產(chǎn)生布局或者可用性的問題。圖2和圖3分別顯示了一個(gè)應(yīng)用程序如果沒有保持密度獨(dú)立和保持密度獨(dú)立的顯示效果。

圖2 沒有支持不同屏幕密度的應(yīng)用程序示例,分別是low、medium和high密度的屏幕效果。

圖3 很好支持不同屏幕密度的應(yīng)用程序示例(也就是密度獨(dú)立),分別是low、medium和high密度的屏幕效果。

Android系統(tǒng)通過兩種方式來幫助你的應(yīng)用程序?qū)崿F(xiàn)密度獨(dú)立:

  • 系統(tǒng)根據(jù)當(dāng)前屏幕的實(shí)際密度自動(dòng)縮放dp單位到合適的大小
  • 在需要的情況下,系統(tǒng)根據(jù)當(dāng)前屏幕的實(shí)際密度自動(dòng)縮放圖片資源到合適的尺寸

在圖2中,TextView和ImageView的尺寸通過像素(px單位)來指定,因此這些View的物理尺寸在low密度屏幕上顯示會(huì)變得很大,在high密度屏幕上顯示的很小。這是因?yàn)楸M管它們的屏幕實(shí)際物理尺寸大小一樣,但是high密度的屏幕上每英寸擁有的像素點(diǎn)更多(反過來也就是同樣數(shù)量的像素點(diǎn)在high密度屏幕上能夠填充的范圍更少)。由于密度無關(guān)像素的基準(zhǔn)是medium密度的屏幕,所以在上面兩張圖片中medium密度的屏幕顯示效果是一樣的。對(duì)于low密度和high密度的屏幕,系統(tǒng)會(huì)自動(dòng)分別為dp值的實(shí)際尺寸縮小或放大到合適尺寸。

大多數(shù)情況下,確保你的應(yīng)用程序與密度無關(guān),你只需要簡(jiǎn)單的將所有l(wèi)ayout中的尺寸值使用dp單位或者“wrap_content”屬性值聲明。這樣系統(tǒng)也才能夠根據(jù)當(dāng)前屏幕的密度選擇合適的縮放因子將圖片資源縮放到合適的尺寸。

然而,從上面的截圖中,你可能已經(jīng)發(fā)現(xiàn)圖片的縮放會(huì)導(dǎo)致圖片模糊或者產(chǎn)生齒距。為了避免這種情況,你需要為不同的密度提供可替換的圖片資源。例如,你應(yīng)該為high密度的屏幕提供高分辨率的圖片,系統(tǒng)會(huì)在high密度屏幕上使用高分辨率的圖片來縮放,而不是直接使用medium密度的圖片。下面的章節(jié)會(huì)詳細(xì)說明如何為不同配置的屏幕提供可替換掉的資源。


如何支持多樣屏幕(How to Support Multiple Screens)


Android支持多樣屏幕的基礎(chǔ)是它能夠根據(jù)當(dāng)前屏幕配置適當(dāng)渲染應(yīng)用程序布局和圖片的能力。系統(tǒng)正確處理了每一塊屏幕上的UI渲染工作,這些操作是通過縮放layout來適配屏幕尺寸/密度,或者縮放圖片來適配屏幕密度。為了更好的處理不同屏幕配置之間的差異,你還應(yīng)該做以下工作:

  • 在manifest中明確聲明你的應(yīng)用程序所支持的屏幕尺寸
    通過聲明你的應(yīng)用程序所支持的屏幕尺寸,你可以確保只有符合屏幕配置條件的設(shè)備才能下載你的應(yīng)用程序。聲明所支持的不同屏幕尺寸也會(huì)影響系統(tǒng)如何在更大的屏幕上繪制你的應(yīng)用程序——無論你的應(yīng)用程序是否運(yùn)行在屏幕兼容模式下。
    聲明你的應(yīng)用程序所支持的屏幕尺寸,你需要在manifest文件中聲明<supports-screens>標(biāo)簽。

  • 為不同的屏幕尺寸提供不同的layout
    默認(rèn)情況下,Android會(huì)調(diào)整應(yīng)用程序的layout大小來適配當(dāng)前設(shè)備屏幕。在大多數(shù)情況下,這么做沒什么問題。然而,在有些情況下,你的UI可能看起來沒那么好,需要針對(duì)不同屏幕尺寸做一定的調(diào)整。例如,在大屏幕上面,你可能想要調(diào)整一些元素的位置和尺寸來利用大屏幕多出來的屏幕空間,或者在小屏幕上你可能需要調(diào)整下尺寸才能讓全部元素都能正確顯示在屏幕上。
    提供特定尺寸資源,你可以使用的配置修飾符有small、noraml、large、xlarge。例如,為extra-large屏幕提供的layout資源應(yīng)該放在layout-xlarge/資源文件夾下。
    從Android 3.2(API level 13)開始,上面所說的尺寸類別已經(jīng)被棄用,你應(yīng)該使用sw<N>dp配置修飾符作為替代品來定義你的layout資源要求的最小可用寬度。例如,如果你的多窗口平板布局要求最少600dp的屏幕寬度,你就應(yīng)該使用layout-sw600dp/資源文件夾。更多關(guān)于這種聲明layout資源的新技術(shù),請(qǐng)參考下面Declaring Table Layouts for Android 3.2章節(jié)。

  • 為不同的屏幕密度提供不同的圖片資源
    默認(rèn)情況下,Android會(huì)自動(dòng)縮放你的bitmap圖片(.png,.jpg,和.gif文件)和Nine-Patch圖片(.9.png文件),這樣它們才能在每一臺(tái)設(shè)備上渲染出合適的物理尺寸。例如,如果你的應(yīng)用程序只為基準(zhǔn)密度,也就是medium屏幕密度(mdpi)提供了圖片資源,那么系統(tǒng)將會(huì)在high密度屏幕上放大這些圖片,在low密度屏幕上縮小這些圖片。這些縮放可會(huì)到引起圖片顯示問題。為了確保你的圖片看起來顯示效果最好,你應(yīng)該為不同密度的屏幕提供不同分辨率的圖片進(jìn)行替換。
    提供特定密度的資源,你可以使用的配置修飾符(下面章節(jié)詳細(xì)介紹)有l(wèi)dpi(low)、mdpi(medium)、hdpi(high)、xhdpi(extra-high)、xxhdpi(extra-extra-high)、xxxhdpi(extra-extra-extra-high)。例如,想要為high屏幕密度提供的圖片應(yīng)該放在drawable-hdpi/資源文件夾下。

注意: mipmap-xxxhdpi修飾符只有在需要為xxdpi屏幕密度的設(shè)備提供比通常更大的啟動(dòng)圖標(biāo)時(shí)才必須使用的。你不需要為所有圖片都提供xxxdpi規(guī)格的版本。

有些設(shè)備會(huì)將啟動(dòng)圖標(biāo)放大多達(dá)25%。例如,如果你的最高啟動(dòng)圖標(biāo)密度已經(jīng)是extra-extra-hight密度,縮放程序?qū)?huì)使啟動(dòng)圖標(biāo)的顯示效果變得模糊。因此,你應(yīng)該在mipmap-xxxhdpi資源文件夾中提供更高密度的啟動(dòng)圖標(biāo),系統(tǒng)會(huì)直接使用這個(gè)圖標(biāo),而不是去放大低密度版本的圖片。

參考提供xxx-high密度啟動(dòng)圖標(biāo)章節(jié)獲取更多詳細(xì)信息。除了啟動(dòng)圖標(biāo),你不應(yīng)該為其它UI元素提供xxxhdpi類型的圖片。

注意: 將你的啟動(dòng)圖標(biāo)放在res/mipmap-[density]資源文件夾下,而不是res/drawable-[density]資源文件夾。因?yàn)?#xff0c;不管你的應(yīng)用程序?qū)嶋H安裝的設(shè)備屏幕分辨率是多少,Android系統(tǒng)都會(huì)保留這類密度修飾符的資源文件夾,例如mipmap-xxxhdpi。這樣啟動(dòng)器才能夠選擇你的應(yīng)用程序最佳分辨率的圖標(biāo)顯示在home上面。更多關(guān)于mipmap文件夾的信息,請(qǐng)參考Managing Projects Overview

所有的這些尺寸和密度的配置修飾符一一對(duì)應(yīng)上面屏幕支持的范圍(Range of screens supported) 章節(jié)所提到的通用尺寸和通用密度。

注意: 如果你不熟悉這些配置修飾符,以及系統(tǒng)如何使用它們來適配替換資源,請(qǐng)參考Providing Alternative Resources。

在運(yùn)行的過程中,系統(tǒng)通過以下幾個(gè)步驟來確保UI在當(dāng)前屏幕上能有最好的顯示效果:

  • 系統(tǒng)使用適當(dāng)?shù)目商鎿Q資源
    根據(jù)當(dāng)前屏幕的尺寸和密度,系統(tǒng)將使用應(yīng)用程序提供的對(duì)應(yīng)尺寸和密度修飾符資源文件夾中的資源。例如,一臺(tái)high密度的設(shè)備要使用應(yīng)用程序的一張圖片資源,系統(tǒng)將會(huì)在應(yīng)用程序的全部資源文件夾中挑選最匹配當(dāng)前設(shè)備配置的資源文件夾。取決于可用的替代資源,使用hdpi修飾符的資源文件夾(例如drawable-hdpi)可能是最佳的匹配,系統(tǒng)就會(huì)使用這個(gè)文件夾中的圖片資源。

  • 如果沒有找到匹配的可用資源,系統(tǒng)將會(huì)使用默認(rèn)的資源加以放大或縮小來適配當(dāng)前屏幕尺寸和密度
    所謂的默認(rèn)資源文件夾就是那些不帶任何配置修飾符的資源文件夾。例如,drawable/資源文件夾中的資源就是默認(rèn)的圖片資源。系統(tǒng)會(huì)假設(shè)默認(rèn)的資源是根據(jù)屏幕尺寸和密度的基準(zhǔn)來設(shè)計(jì)的,也就是normal尺寸和medium密度。因此,系統(tǒng)將會(huì)為高密度的屏幕放大默認(rèn)圖片,為低密度屏幕縮小默認(rèn)圖片。
    然而,當(dāng)系統(tǒng)查找對(duì)應(yīng)當(dāng)前屏幕的密度修飾符資源但又找不到匹配的資源時(shí),系統(tǒng)不一定就會(huì)使用默認(rèn)的資源。系統(tǒng)也有可能會(huì)使用其它密度修飾符的資源來作替代,以便放大縮小后能夠取得最好的效果。例如,當(dāng)系統(tǒng)尋找low密度的資源但是又找不到的時(shí)候,系統(tǒng)會(huì)優(yōu)先用high密度的資源進(jìn)行縮小,因?yàn)橄鄬?duì)于使用0.75縮放因子將medium密度資源縮小成low密度資源,系統(tǒng)使用0.5的縮放因子將high密度資源縮小成low密度的資源會(huì)更加容易和節(jié)省開銷。

  • 更多關(guān)于Android系統(tǒng)如何選取帶配置修飾符的可替代資源來適應(yīng)設(shè)備配置信息,請(qǐng)參考How Android Finds the Best-matching Resource。

    3.1 使用配置修飾符(Using configuration qualifiers)

    Android支持一系列配置修飾符,通過這些修飾符,你可以控制系統(tǒng)如何基于當(dāng)前設(shè)備屏幕的特性選擇對(duì)應(yīng)的替代資源。所謂的配置修飾符就是一串字符串,用于附加到你的Android項(xiàng)目資源文件夾后面,以指明該資源文件夾所針對(duì)的配置。

    配置修飾符的使用方式:

  • 在你的項(xiàng)目res/文件夾下創(chuàng)建一個(gè)新的文件夾,并以<resources_name>-<qualifiter>格式命名

    • <resources_name>指的是標(biāo)準(zhǔn)的資源名稱(例如drawable或者layout)。
    • <qualifier>指的是下面表1中的配置修飾符,用于指明文件夾中的資源對(duì)應(yīng)的屏幕配置(例如hdpi或xlarge)
  • 將適當(dāng)?shù)呐渲觅Y源放到對(duì)應(yīng)的資源文件夾中。這些資源的名稱必須與默認(rèn)的資源文件一模一樣。

  • 例如,xlarge是針對(duì)extra-large屏幕的配置修飾符。當(dāng)你將這個(gè)修飾符添加到資源文件夾后面時(shí)(例如layout-xlarge),它向系統(tǒng)指明這些資源應(yīng)該用于extra-large屏幕的設(shè)備。

    表1 允許你為不同屏幕配置指定資源的配置修飾符

    屏幕特性修飾符描述
    尺寸small針對(duì)small通用屏幕尺寸的資源
    normal針對(duì)normal通用屏幕尺寸的資源(也是所用尺寸的基準(zhǔn)尺寸)
    large針對(duì)large通用屏幕尺寸的資源
    xlarge針對(duì)extra-large通用屏幕尺寸的資源
    密度ldpi針對(duì)low通用屏幕密度(ldpi)的資源(大約120dpi)
    mdpi針對(duì)medium通用屏幕密度(mdpi)的資源(大約160dpi,也是通用屏幕密度的基準(zhǔn))
    hdpi針對(duì)high通用屏幕密度(hdpi)的資源(大約240dpi)
    xhdpi針對(duì)extra-high通用屏幕密度(xhdpi)的資源(大約320dpi)
    xxhdpi針對(duì)extra-extra-high通用屏幕密度(xxhdpi)的資源(大約480dpi)
    xxxhdpi針對(duì)extra-extra-extra-high通用屏幕密度的資源(大約640dpi)。只用于存放啟動(dòng)圖標(biāo),詳情請(qǐng)參考上面章節(jié)。
    nodpi針對(duì)所有屏幕密度的資源。這些資源與密度無關(guān),無論當(dāng)前屏幕密度是多少,系統(tǒng)都不會(huì)放大縮小這些資源。
    tvdpi針對(duì)介于mdpi和hdpi之間屏幕密度的資源,大約是213dpi。這不是一個(gè)主要密度類型,它主要是為電視機(jī)屏幕而設(shè)置。大多數(shù)app都不需要這種類型,提供的mdpi和hdpi資源已經(jīng)能夠滿足大部分app的需求,并且在需要的時(shí)候系統(tǒng)也會(huì)自動(dòng)對(duì)這些資源進(jìn)行縮放到合適的大小。如果你需要提供tvdpi類型的資源,你需要使用1.33倍mdpi的縮放因子來設(shè)置tvdpi資源的大小。例如,一張針對(duì)mdpi屏幕的100x100px圖片,對(duì)應(yīng)tvdpi屏幕的尺寸是133x133px。
    方向land針對(duì)橫向屏幕的資源(寬寬高比)
    port針對(duì)豎向屏幕的資源(高寬高比)
    長(zhǎng)寬比long針對(duì)屏幕的豎屏或?qū)捚灵L(zhǎng)寬比(分別對(duì)應(yīng)豎向或者橫向方向)比基準(zhǔn)屏幕配置更大的屏幕資源
    notlong針對(duì)屏幕的豎屏或者寬屏長(zhǎng)寬比比基準(zhǔn)屏幕配置更小的屏幕資源


    注意: 如果你的應(yīng)用程序是為Android 3.2或者更高的系統(tǒng)版本開發(fā)的,那么你需要查看下面Declaring Table Layouts for Android 3.2章節(jié),在定義layout資源的時(shí)候使用新的配置修飾符來聲明所適配的屏幕尺寸(替換表一中的尺寸修飾符)

    更多關(guān)于這些修飾符如何匹配當(dāng)前屏幕實(shí)際尺寸和密度的內(nèi)容,請(qǐng)參考前面屏幕支持范圍(Range of Screens Support) 章節(jié)。

    例如,下面的應(yīng)用程序的資源目錄為不同的屏幕尺寸提供了不同的layout資源,為不同的屏幕密度提供了不同的圖片,并使用mipmap/資源文件夾提供啟動(dòng)圖標(biāo):

    res/layout/my_layout.xml // layout for normal screen size ("default") res/layout-large/my_layout.xml // layout for large screen size res/layout-xlarge/my_layout.xml // layout for extra-large screen size res/layout-xlarge-land/my_layout.xml // layout for extra-large in landscape orientationres/drawable-mdpi/graphic.png // bitmap for medium-density res/drawable-hdpi/graphic.png // bitmap for high-density res/drawable-xhdpi/graphic.png // bitmap for extra-high-density res/drawable-xxhdpi/graphic.png // bitmap for extra-extra-high-densityres/mipmap-mdpi/my_icon.png // launcher icon for medium-density res/mipmap-hdpi/my_icon.png // launcher icon for high-density res/mipmap-xhdpi/my_icon.png // launcher icon for extra-high-density res/mipmap-xxhdpi/my_icon.png // launcher icon for extra-extra-high-density res/mipmap-xxxhdpi/my_icon.png // launcher icon for extra-extra-extra-high-density

    更多關(guān)于如何使用可替代資源,以及完整的配置修飾符列表(不單只是屏幕配置修飾符),請(qǐng)參考Providing Alternative Resource.

    要注意,系統(tǒng)在運(yùn)行的時(shí)候會(huì)選擇哪一種資源作為“最合適”的資源是根據(jù)一定的邏輯規(guī)則來決定的。也就是,無論在哪種屏幕下,你所使用的修飾符都不一定要跟當(dāng)前屏幕配置完全匹配,以便系統(tǒng)能夠自己選擇。具體來講,當(dāng)基于尺寸修飾符選擇資源的時(shí)候,如果沒有更匹配的資源,系統(tǒng)會(huì)選擇為比當(dāng)前屏幕更小的屏幕所提供的資源(例如,在需要的時(shí)候large尺寸的屏幕可能會(huì)使用normal尺寸的資源)。另外,如果唯一能夠使用的資源是為比當(dāng)前設(shè)備屏幕更大的屏幕所提供的,那么系統(tǒng)將不會(huì)使用這些資源,并且應(yīng)用程序會(huì)崩潰(例如,所有的layout資源都添加了xlarge修飾符,但是當(dāng)前設(shè)備屏幕是normal尺寸屏幕)。更多關(guān)于系統(tǒng)選擇資源的信息,請(qǐng)參考How Android Finds the Best-matching Resource.

    小貼士: 如果你有一些圖片資源希望系統(tǒng)永遠(yuǎn)不進(jìn)行縮放(可能你想要在程序運(yùn)行時(shí)由自己來控制和調(diào)整),那么你應(yīng)該把這些資源放到nodpi配置修飾符的資源文件夾中。在這個(gè)配置修飾符文件夾中的資源是密度無關(guān)的資源,系統(tǒng)永遠(yuǎn)不會(huì)對(duì)它們進(jìn)行縮放。

    3.2 設(shè)計(jì)可替代的布局和圖片資源(Designing alternative layouts and drawables)

    需要提供哪些可替代資源是根據(jù)你的應(yīng)用程序需求來決定的。通常情況下,你需要使用尺寸和方向類的修飾符來提供可替代的layout資源,以及使用密度類的修飾符提供可替代的圖片資源。

    下面章節(jié)將分別總結(jié)為什么你要使用尺寸類或密度類修飾符提供可替代的layout資源或者圖片資源。

    3.2.1 可替代布局資源(Alternative layouts)

    通常情況下,只要你在不同配置的屏幕上測(cè)試你的應(yīng)用程序,你就能知道是否需要為不同的屏幕尺寸提供可替換的layout資源了。例如:

    • 當(dāng)你在small屏幕上測(cè)試的時(shí)候,你可能會(huì)發(fā)現(xiàn)你的layout不能很好的填充在屏幕上。例如,在small屏幕上,屏幕的寬度內(nèi)不能填滿多個(gè)按鈕。這種情況下,你需要為small屏幕提供可替代的layout資源來調(diào)整按鈕的尺寸和位置。

    • 當(dāng)你在extra-large屏幕上測(cè)試的時(shí)候,你可能會(huì)發(fā)現(xiàn)你的layout不能高效利用大屏幕的優(yōu)勢(shì),并且整個(gè)布局都被拉伸來填滿屏幕。這種情況下,你需要為extra-large屏幕提供可替代的layout資源,重新提供為大屏幕(例如平板)優(yōu)化的UI。
      盡管你的應(yīng)用程序不為大屏幕提供可替代layout資源也能夠正常運(yùn)行,但對(duì)用戶來說,提供可替代資源能讓用戶感覺這個(gè)應(yīng)用程序就是為了他的設(shè)備所設(shè)計(jì)的。如果UI都被拉伸了,用戶對(duì)應(yīng)用程序的用戶體驗(yàn)可能很反感。

    • 另外,當(dāng)測(cè)試橫向屏幕與豎向屏幕時(shí),你可能會(huì)發(fā)現(xiàn)豎向屏幕底部的UI元素在橫向屏幕上顯示在屏幕右邊。

    總結(jié),你應(yīng)該確認(rèn)你的應(yīng)用程序布局是存在以下幾點(diǎn):

    • 需要適配小屏幕(這樣用戶才能正常使用你的應(yīng)用程序)
    • 是否有對(duì)大屏幕進(jìn)行優(yōu)化以充分利用大屏幕帶來的額外空間
    • 是否有對(duì)橫向和豎向屏幕進(jìn)行優(yōu)化

    如果你的UI所使用的圖片即使在被系統(tǒng)縮放layout之后也要填充整個(gè)view(例如按鈕的背景圖片),那么你應(yīng)該使用Nine-Patch圖片文件。Nine-Patch(點(diǎn)九圖)文件實(shí)際上就是在png圖片文件的基礎(chǔ)上指定了兩個(gè)維度上的可拉伸區(qū)域。當(dāng)系統(tǒng)拉伸使用點(diǎn)九圖的的view時(shí),所使用的點(diǎn)九圖也會(huì)被拉伸,只不過拉伸的只是點(diǎn)九圖上指定的可拉伸區(qū)域。因此,如果使用點(diǎn)九圖的話就不需要為不同的屏幕尺寸提供不同的圖片,因?yàn)辄c(diǎn)九圖能夠自動(dòng)調(diào)整到任何尺寸。然而,你還是要為不同的屏幕密度提供可替代的點(diǎn)九圖資源。

    3.2.2 可替代圖片資源(Alternative drawables)

    幾乎每一個(gè)應(yīng)用程序都需要為不同的屏幕密度提供可替代的圖片資源,因?yàn)槊恳粋€(gè)應(yīng)用程序都有一個(gè)啟動(dòng)圖標(biāo),至少要保證這個(gè)啟動(dòng)圖標(biāo)在每一塊屏幕上都有良好的顯示效果。同樣,如果你的應(yīng)用程序中還有其它的圖片(例如菜單圖標(biāo)或者其它圖形),你都應(yīng)該為不同的屏幕密度給每一張圖片都提供可替換的版本。

    注意: 你只需要為圖片文件(.png,.jpg或.git)和Nine-Patch文件提供密度相關(guān)的資源。如果你使用XML文件來定義圖形、顏色或者其它drawable resources,那么你只需要在默認(rèn)的圖片文件夾(drawable/)中保留一份代碼就可以了。

    要為不同的屏幕密度創(chuàng)建可替代的圖片資源,你應(yīng)該遵循六種通用屏幕密度圖片的縮放比例3:4:6:8:12:16。例如,如果你有一張為medium屏幕密度設(shè)計(jì)的圖片尺寸是48x48像素,那么其它尺寸應(yīng)該為:

    • 36x36(0.75x),low屏幕密度
    • 48x48(1.0x 基準(zhǔn)),medium屏幕密度
    • 72x72(1.5x),high屏幕密度
    • 96x96(2.0x),extra-high屏幕密度
    • 180x180(3.0x),extra-extra-high屏幕密度
    • 192x192(4.0x),extra-extra-extra-high屏幕密度(只需要啟動(dòng)圖標(biāo),參考上面章節(jié))

    圖4 每一種屏幕密度之間圖片的尺寸關(guān)系

    更多關(guān)于設(shè)計(jì)圖標(biāo)的信息,請(qǐng)參考Icon Design Guidelines。里面包含了各種圖片資源的尺寸信息,包括啟動(dòng)圖標(biāo)、菜單圖標(biāo),狀態(tài)欄圖標(biāo)、標(biāo)簽圖標(biāo)等等。


    為Android 3.2聲明平板布局(Declaring Tablet Layouts for Android 3.2)


    自從第一代運(yùn)行Android 3.0系統(tǒng)的平板開始,為平板定義layout的重要方法就是把平板layout放到帶xlarge配置修飾符的資源文件夾中(例如res/layout-xlarge)。為了兼容其它類型的平板以及屏幕尺寸(特別是7英寸的平板),Android 3.2開始引入新的方法來為更碎片化的屏幕尺寸指定資源。相對(duì)于嘗試將你的layout適配到通用的尺寸(例如large或者xlarge),新的技術(shù)是基于你的layout需要的空間大小(例如寬度要600dp)來調(diào)整。

    這么設(shè)計(jì)的原因是當(dāng)使用通用尺寸為7英寸平板做適配時(shí),事情會(huì)變得非常棘手,因?yàn)?英寸平板在通用尺寸歸類技術(shù)上與5英寸手機(jī)都劃分為同一組(large類型)。盡管這種設(shè)備從尺寸上來看非常相近,但是對(duì)應(yīng)用程序的UI占用的空間大小來說是顯著不同的,同樣用戶交互習(xí)慣也不同。因此,7英寸和5英寸屏幕不應(yīng)該使用相同的layout資源。為了實(shí)現(xiàn)為這兩種不同的屏幕尺寸提供不同的layout資源,Android現(xiàn)在允許你根據(jù)應(yīng)用程序layout實(shí)際需要的尺寸來聲明layout資源的類型,并且要使用dp單位。

    例如,你在為平板設(shè)備特別設(shè)計(jì)好layout資源之后,應(yīng)該在小于600dp寬度的屏幕上檢查這些layout是否能使用。因?yàn)槭褂眠@些平板layout資源的條件就是屏幕的最小尺寸是否滿足你聲明的尺寸。因此,現(xiàn)在你可以為你的應(yīng)用程序UI指定一些只有在可用寬度最少為600dp時(shí)才能使用的layout資源。

    你應(yīng)該在指定一個(gè)寬度的同時(shí),以這個(gè)寬度作為最小尺寸來進(jìn)行設(shè)計(jì)。否則,你需要在完成layout資源后測(cè)試你的layout能夠支持的最小寬度。

    注意: 所有使用新API指定的數(shù)值都是密度無關(guān)的值(dp),所以你的layout尺寸也應(yīng)該使用dp單位來定義,因?yàn)槟銘?yīng)該關(guān)心的只是系統(tǒng)計(jì)算屏幕密度后得出來的可用屏幕空間總值(強(qiáng)烈反對(duì)使用物理像素單位)。更多關(guān)于密度無關(guān)像素的內(nèi)容,請(qǐng)參考上面術(shù)語與概念(Terms and concepts) 章節(jié)。

    4.1 使用新的尺寸修飾符(Using new size qualifiers)

    表2總結(jié)了能夠根據(jù)屏幕可用空間大小來指定資源的配置修飾符。相比較于傳統(tǒng)的通用屏幕尺寸類型(small、normal、large、xlarge),新的修飾符能基于你的應(yīng)用程序支持的屏幕尺寸給你提供更多的控制。

    注意: 你使用這些修飾符指定的尺寸不是實(shí)際上的屏幕尺寸。實(shí)際上,這些尺寸是你的Activity窗口可用寬度或者高度的dp值。Android系統(tǒng)可能會(huì)占用一些屏幕空間來顯示系統(tǒng)UI(例如屏幕底部的系統(tǒng)欄或者頂部的狀態(tài)欄),因此一些屏幕可能無法使用你的layout資源。也就是說,你聲明的尺寸應(yīng)該是你的Activity需要的尺寸——系統(tǒng)會(huì)統(tǒng)計(jì)系統(tǒng)UI占用的空間后決定給你的layout提供多大的空間。另外也要注意Action Bar也是你的應(yīng)用程序組成部分,盡管你的layout資源沒有聲明它,但是它同樣要占用你的layout可用空間的一部分,你在設(shè)計(jì)的時(shí)候也要把這部分給計(jì)算進(jìn)去。

    表2 新的屏幕尺寸配置修飾符(Android 3.2引入)

    屏幕配置修飾符說明
    最小寬度 (smallestWidth)sw<N>dp
    例如:sw600dp、sw720dp
    屏幕的基本尺寸,由屏幕可用區(qū)域的最短尺寸所決定。準(zhǔn)確的說,設(shè)備的最小寬度就是屏幕最短的可用高度和寬度(你也可以認(rèn)為是屏幕有可能呈現(xiàn)的最短寬度)。你可以使用這個(gè)修飾符來確保無論當(dāng)前屏幕的方向如何,你的應(yīng)用程序UI最少可用的寬度都有<N> dp。
    例如,你的應(yīng)用程序無論任何時(shí)候都要求屏幕寬度最少要600dp,那么你就可以使用這個(gè)修飾符創(chuàng)建一個(gè)layout資源并放到res/layout-sw600dp/的資源文件夾中。系統(tǒng)只會(huì)在當(dāng)前屏幕可用最小尺寸為600dp時(shí)才會(huì)使用這個(gè)資源,并且不管這個(gè)600dp是用戶認(rèn)為的高度還是寬度。最小寬度是一個(gè)固定的屏幕尺寸,是屏幕的一個(gè)屬性。無論當(dāng)前屏幕的方向如何,設(shè)備的最小寬度都是不會(huì)變的。
    設(shè)備的最小寬度要考慮到屏幕的裝飾空間和系統(tǒng)UI。例如,如果設(shè)備屏幕有一些持久性的UI沿著最小寬度的軸心占據(jù)一定的空間,那么系統(tǒng)聲明的最小寬度值將會(huì)比實(shí)際屏幕的尺寸小,因?yàn)楸徽紦?jù)的這部分屏幕空間你的UI永遠(yuǎn)無法使用。
    這是相對(duì)于傳統(tǒng)通用尺寸修飾符(small、normal、large、xlarge)的替代方案,它允許你根據(jù)你的UI實(shí)際需要的可用尺寸定義離散的數(shù)值。使用最小寬度來定義通用尺寸是非常有用的,因?yàn)閷挾韧ǔJ窃O(shè)計(jì)一個(gè)layout的關(guān)鍵因素。一個(gè)UI通常可以上下滑動(dòng),但是卻在橫向空間上無法擴(kuò)展。可用寬度同時(shí)也是決定是否在手機(jī)上顯示單窗口layout或者平板上顯示多窗口layout的關(guān)鍵因素。因此,你應(yīng)該更加關(guān)注每一種設(shè)備上可能的最小寬度值是多少。
    可用屏幕寬度 (Available screen width)w<N>dp
    例如:w720dp、w1024dp
    通過<N>值指定該資源文件夾中資源最小可用寬度的dp值。當(dāng)屏幕在橫向和豎向之間切換的時(shí)候,系統(tǒng)相應(yīng)的寬度值會(huì)改變,以實(shí)時(shí)更新你的UI當(dāng)前可用的實(shí)際寬度。
    這通常對(duì)判斷是否使用多窗口layout非常有用,因?yàn)楸M管是在平板設(shè)備上,你通常也不希望豎向多窗口布局與橫向的相同。因此,你可以使用這個(gè)修飾符來聲明layout所需要的最小寬度,而不是同時(shí)使用屏幕尺寸和方向的修飾符來聯(lián)合聲明。
    可用屏幕高度 (Available screen high)h<N>dp
    例如:h720dp、h1024dp
    通過<N>值指定該資源文件夾中資源最小可用高度的dp值。當(dāng)屏幕在橫向和豎向之間切換的時(shí)候,系統(tǒng)相應(yīng)的高度值會(huì)改變,以實(shí)時(shí)更新你的UI當(dāng)前可用的實(shí)際高度。
    與使用w<N>dp來定義layout所需寬度一樣,使用h<N>dp來定義你的layout所需要的高度也是非常有用的,它可以避免使用屏幕尺寸和方向兩種修飾符來進(jìn)行組合定義。然而,大多數(shù)app不需要這個(gè)修飾符。因?yàn)閁I在需要的時(shí)候一般都能夠上下滑動(dòng),在可用高度的控制上本身就比較靈活,不像可用寬度無法擴(kuò)展。


    盡管看起來使用這些修飾符要比使用通用屏幕尺寸類修飾符更復(fù)雜,但是一旦你確定了你的UI需求,使用這些修飾符實(shí)際上要簡(jiǎn)單得多。當(dāng)你在設(shè)計(jì)UI的時(shí)候,你所關(guān)心的最主要問題應(yīng)該是你的應(yīng)用程序在手機(jī)風(fēng)格的UI和平板風(fēng)格的UI(使用多窗口)之間切換時(shí),你所能使用的實(shí)際尺寸。這個(gè)UI風(fēng)格切換的關(guān)鍵點(diǎn)取決于你特定的設(shè)計(jì)——可能你的平板layout需要720dp的寬度,也有可能600dp或者480dp就夠了,還有可能是介于兩者之間的某個(gè)值。使用表二中的修飾符,你就能精確的控制你的layout切換臨界值。

    更多關(guān)于這些尺寸配置修飾符的資料,請(qǐng)參考Providing Resource文檔。

    4.2 配置實(shí)例(Configuration examples)

    為了幫助你針對(duì)不同類型的設(shè)備進(jìn)行設(shè)計(jì),下面是一些典型屏幕寬度的數(shù)值:

    • 320dp:一種典型的手機(jī)屏幕(240x320 ldpi、320x480 mdpi、480x800 hdpi等等)
    • 480dp:像是平板設(shè)備的過渡線(480x800 mdpi)
    • 600dp:一種7英寸平板(600x1024 mdpi)
    • 720dp:一種10英寸平板(720x1028 mdpi、800x1280 mdpi等等)

    使用表2中的尺寸修飾符,你的應(yīng)用程序可以根據(jù)你想要的寬度(或高度)來設(shè)定準(zhǔn)確的數(shù)值去促使手機(jī)和平板分別使用不同的layout資源。例如,如果600dp是你的平板layout能夠支持的最小可用寬度值,你就可以提供下面兩套layout資源:

    res/layout/main_activity.xml # 手機(jī)使用 res/layout-sw600dp/main_activity.xml # 平板使用

    在這個(gè)例子中,只有當(dāng)前屏幕空間的最小可用寬度值為600dp時(shí),你的平板layout才能夠被使用。

    如果你還想進(jìn)一步自定義你的UI,例如分別為7英寸和10英寸平板設(shè)計(jì)不同的layout,那么你可以再補(bǔ)充額外的最小寬度值layout:

    res/layout/main_activity.xml # 手機(jī)使用 (小于600dp的可用寬度) res/layout-sw600dp/main_activity.xml # 7英寸平板使用(600dp或者更大的屏幕寬度) res/layout-sw720dp/main_activity.xml # 10英寸平板使用(720dp或者更大的屏幕寬度)

    注意上面兩個(gè)例子中的資源所使用的最小寬度修飾符sw<N>dp,它所指的是不管當(dāng)前設(shè)備的方向怎樣,屏幕寬高兩條邊中的最小寬度。因此,使用sw<N>dp從總體上忽略了屏幕的方向并為你的layout指定屏幕的可用尺寸是一種比較方便的方法。

    然而,在一些情況下,分辨當(dāng)前可用寬度或者高度對(duì)你的UI非常重要。例如,如果你有一個(gè)內(nèi)置兩個(gè)窗口的layout要顯示兩個(gè)邊靠邊的fragment,你可能就需要根據(jù)當(dāng)前屏幕的寬度是否大于等于600dp,以及是否橫向還是豎向才能決定是否使用這個(gè)layout。這種情況下,你的資源文件應(yīng)該類似下面:

    res/layout/main_activity.xml # 手機(jī)使用(可用寬度小于600dp) res/layout-w600dp/main_activity.xml # 多窗口 (任何可用寬度大于等于600dp的屏幕)

    注意第二套資源使用的可用寬度修飾符是w<N>dp。使用這種方法,有些設(shè)備由于屏幕方向的改變導(dǎo)致兩種layout都會(huì)使用到(例如屏幕在一個(gè)方向上可用寬度至少有600dp,而在另一個(gè)方向可用寬度小于600dp)。

    如果可用高度才是你需要關(guān)注的點(diǎn)的話,你同樣也可以與上面一樣使用h<N>dp修飾符。甚至,你還可以聯(lián)合w<N>dph<N>dp兩種修飾符一塊使用,如果你真的需要的話。。。

    4.3 聲明支持的屏幕尺寸(Declaring screen size support)

    一旦你為不同的屏幕尺寸實(shí)現(xiàn)了對(duì)應(yīng)的layout后,在你的manifest文件中聲明你的應(yīng)用程序所支持的屏幕也是同樣重要的。

    相對(duì)于新的屏幕配置修飾符,Android 3.2也為manifest的<support-screens> 元素引入了新的屬性。

    • android:requiresSmallesWidthDp
      聲明支持的最小屏幕寬度。最小寬度指的是屏幕空間(dp單位)上最短的邊能夠給你的應(yīng)用程序最小的可用寬度,換句話說就是在屏幕兩條邊上最短的可用邊。因此,為了能讓設(shè)備兼容你的應(yīng)用程序,設(shè)備的最小寬度應(yīng)該等于或者大于聲明的這個(gè)值。(通常聲明的這個(gè)“最小寬度”值指的是你的layout所支持的值,并且不管當(dāng)前屏幕是什么方向。)
      例如,如果你的應(yīng)用程序只支持最小可用寬度為600dp的平板設(shè)備:
    <manifest ... ><supports-screens android:requiresSmallestWidthDp="600" />... </manifest>

    然而,如果你的應(yīng)用程序支持Android所支持的所有屏幕(比如小到426dpx320dp),那么你可以不用聲明這個(gè)屬性,因?yàn)槟愕膽?yīng)用程序支持的最小寬度已經(jīng)覆蓋了可能遇到的最小設(shè)備了。

    慎重: Android系統(tǒng)并不會(huì)注意這個(gè)屬性,因此在運(yùn)行的過程中這個(gè)屬性并不會(huì)對(duì)應(yīng)用程序的行為產(chǎn)生任何影響。它的作用是在像Google Paly這樣的服務(wù)中過濾你的應(yīng)用程序。不過,Google Play當(dāng)前并不支持這個(gè)屬性過濾(在Android 3.2版本上)。因此如果你的應(yīng)用程序不支持小屏幕,你還需要繼續(xù)使用其它關(guān)于尺寸的屬性。

    • android:compatibleWidthLimitDp
      這個(gè)屬性允許你通過指定你的應(yīng)用程序所支持的最大的“最小寬度”值來啟用屏幕兼容模式作為一個(gè)可選的功能。如果設(shè)備屏幕的最小邊可用寬度值大于你聲明的值,用戶依然能夠安裝你的應(yīng)用程序,不過會(huì)在屏幕兼容模式下運(yùn)行。默認(rèn)情況下,屏幕兼容模式是關(guān)閉的,你的layout通常會(huì)被拉伸來填充屏幕。不過在系統(tǒng)欄會(huì)有一個(gè)按鈕允許用戶開啟或者關(guān)閉屏幕兼容模式。

      注意: 如果你的layout能夠在大屏幕上正確的調(diào)整大小,那么你不需要使用這個(gè)屬性。我們建議你避免使用這個(gè)屬性,你應(yīng)該遵從本文檔提到的其它方法來確保你的layout尺寸能夠適配大屏幕。

    • android:largestWidthLimitDp
      這個(gè)屬性允許你通過指定你的應(yīng)用程序支持的最大的“最小寬度”值來強(qiáng)制啟用屏幕兼容模式。如果設(shè)備可用屏幕的最小邊大于你聲明的值,你的應(yīng)用程序?qū)?huì)在屏幕兼容模式下運(yùn)行,并且沒有任何途徑關(guān)閉兼容模式。

      注意: 如果你的應(yīng)用程序layout能夠在大屏幕上正確調(diào)整大小,那么你不需要使用這個(gè)屬性。我們建議你避免使用這個(gè)屬性,你應(yīng)該遵從本文檔提到的其它方法來確保你的layout尺寸能夠適配大屏幕。

    慎重: 當(dāng)為Android 3.2或者更高版本系統(tǒng)開發(fā)應(yīng)用程序時(shí),你不應(yīng)該使用舊的屏幕尺寸屬性與上面列出的屬性組合使用。同時(shí)組合使用新的屬性和舊的尺寸屬性可能會(huì)導(dǎo)致無法預(yù)料到到結(jié)果。

    更多關(guān)于這些屬性的信息,請(qǐng)參考上面列出的相關(guān)鏈接。


    最佳實(shí)踐(Best Practices)


    支持多樣屏幕的目的是為了創(chuàng)建能夠正常運(yùn)行,并且在Android支持的通用屏幕設(shè)備上都能顯示良好的應(yīng)用程序。本文前面的章節(jié)闡述了Android如何適配你的應(yīng)用程序到不同的屏幕配置上,以及你可以怎樣為應(yīng)用程序在不同的屏幕配置上定制不同的效果。本章節(jié)主要提供一些額外的小貼士,以及關(guān)于確保你的應(yīng)用程序在不同屏幕配置上都能良好縮放這種技術(shù)的概要。

    下面是確保你的應(yīng)用程序能夠在不同屏幕上良好顯示的快速檢查列表:

  • 在XML layout文件中指定尺寸時(shí)要使用wrap_content、fill_parent或者dp單位。

  • 不要在你的應(yīng)用程序代碼中使用固定的像素值。

  • 不要使用AbsoluteLayout(已經(jīng)被廢棄)

  • 為不同的屏幕密度提供可替代的圖片資源。

  • 下面的章節(jié)提供更多的細(xì)節(jié)。

    5.1 為layout的尺寸使用wrap_content、fill_content或者dp單位

    當(dāng)在XML layout文件中定義view的android:layout_width和android:layout_height時(shí),使用wrap_content、fill_parent或者dp單位來確保view在當(dāng)前設(shè)備屏幕上能夠分配到一個(gè)合適的尺寸。

    例如,一個(gè)view定義了layout_width="100dp",那么它在medium密度屏幕上將有100像素寬,而在high密度的屏幕上系統(tǒng)會(huì)將它放大到150像素寬,這樣view就在屏幕上占據(jù)大約相等物理尺寸。

    同樣的,你應(yīng)該使用sp(獨(dú)立尺度像素)單位來定義字體的尺寸。sp的縮放因子由用戶設(shè)定,系統(tǒng)會(huì)像處理dp一樣縮放這些尺寸。

    5.2 不要在應(yīng)用程序的代碼中寫死像素值

    出于性能原因以及為了保持代碼的簡(jiǎn)單性,Android系統(tǒng)使用像素作為尺寸和坐標(biāo)值的標(biāo)準(zhǔn)單位。這意味著一個(gè)view的尺寸在代碼中都是用像素單位來表示,并且基于當(dāng)前屏幕密度而變化。例如,如果myView.getWidth()返回值為10,這表示在當(dāng)前屏幕上myView寬度為10像素,但是在更高密度的屏幕上,這個(gè)返回值可能為15像素。如果你在應(yīng)用程序的代碼中使用像素值來定義圖片的尺寸,這會(huì)導(dǎo)致圖片無法根據(jù)當(dāng)前屏幕密度進(jìn)行預(yù)縮放處理,你可能需要在自己的代碼中自行縮放這些像素值來適配未經(jīng)縮放的原圖。

    如果你的應(yīng)用程序需要在運(yùn)行時(shí)操作圖片或者處理像素值,請(qǐng)參考下面Additional Density Consideration章節(jié)。

    5.3 不要使用AbsoluteLayout

    不像其它的layout控件,AbsoluteLayout強(qiáng)制使用固定的值來給子view布局,這樣就導(dǎo)致在不同屏幕上很容易出現(xiàn)布局問題。因此,AbsoluteLayout在Android 1.5(API Level 3)就給廢棄了。

    你應(yīng)該替換使用RelativeLayout,它能夠根據(jù)相對(duì)位置給子view布局。例如,你可以指定一個(gè)按鈕應(yīng)該顯示在一個(gè)TextView的右邊。

    5.4 使用尺寸和密度相關(guān)的資源

    盡管系統(tǒng)會(huì)根據(jù)當(dāng)前屏幕配置自動(dòng)縮放你的layout和圖片資源,但你可能需要調(diào)整UI在不同屏幕上的尺寸,以及為不同的屏幕密度提供對(duì)應(yīng)的圖片資源。這其實(shí)是重申上面章節(jié)講的內(nèi)容。

    如果你需要控制你的應(yīng)用程序在各個(gè)屏幕上的顯示效果,你需要在特定資源文件夾中調(diào)整你的layout和圖片資源。例如,考慮到一個(gè)圖標(biāo)需要在medium和high屏幕密度上顯示,你可以簡(jiǎn)單的創(chuàng)建兩個(gè)不同尺寸的圖標(biāo)(例如medium密度為100x100尺寸,high密度為150x150尺寸),然后分別將這個(gè)兩個(gè)圖標(biāo)放到特定修飾符的資源文件夾中:

    res/drawable-mdpi/icon.png //for medium-density screens res/drawable-hdpi/icon.png //for high-density screens

    注意: 如果一個(gè)資源文件夾的名字沒有定義密度修飾符,那么系統(tǒng)會(huì)認(rèn)為這個(gè)資源文件夾中的資源是為medium這個(gè)密度基準(zhǔn)而設(shè)計(jì)的,并且在需要的情況下會(huì)為其它密度縮放這些資源。

    更多關(guān)于有效配置修飾符的內(nèi)容,請(qǐng)參考上面使用配置修飾符(Using configuration qualifiers)章節(jié)。


    其它密度注意事項(xiàng)(Additional Density Considerations)


    本章節(jié)將闡述更多關(guān)于Android如何在不同屏幕密度上縮放圖片資源,以及如何更進(jìn)一步控制圖片在不同密度屏幕上的繪制。本章節(jié)的內(nèi)容對(duì)于大部分應(yīng)用程序來說不是那么重要,除非你的應(yīng)用程序在不同屏幕密度上運(yùn)行遇到問題,或者你的應(yīng)用程序需要操作圖形。

    為了更好的理解在運(yùn)行過程中是如何操作圖形來支持多種密度屏幕,你應(yīng)該先理解系統(tǒng)用于確保正確縮放圖片的途徑:

  • 預(yù)縮放資源(例如圖片資源)
    基于當(dāng)前屏幕的密度,系統(tǒng)使用你的應(yīng)用程序提供的指定尺寸或密度修飾符的資源直接顯示。如果提供的資源與當(dāng)前屏幕密度不符合,系統(tǒng)將會(huì)加載默認(rèn)的資源并放大或縮小這些資源來適配當(dāng)前的屏幕密度。系統(tǒng)會(huì)假設(shè)默認(rèn)的資源(就是那些保存在沒有添加任何配置修飾符資源文件夾中的資源)是為屏幕密度的基準(zhǔn)(mdpi)而設(shè)計(jì)的,除非系統(tǒng)加載的資源是從其它密度修飾符資源文件中加載的。所謂的預(yù)縮放就是系統(tǒng)將圖片大小調(diào)整到適合當(dāng)前屏幕尺寸時(shí)做的處理。 如果你需要獲取預(yù)縮放資源的尺寸,系統(tǒng)返回的將是縮放之后的資源尺寸。例如,一張為mdpi屏幕設(shè)計(jì)的圖片為50x50像素,它將會(huì)在hdpi屏幕上放大到75x75像素(如果沒有對(duì)應(yīng)的hdpi資源替換的話),并且系統(tǒng)返回的尺寸也將是放大后的這個(gè)值。
    在一些情況下,你可能不希望Android系統(tǒng)進(jìn)行預(yù)縮放資源處理。避免預(yù)縮放處理最簡(jiǎn)單的方法就是把資源放到nodpi配置修飾符的資源文件夾下。例如:
    res/drawable-nodpi/icon.png
    當(dāng)系統(tǒng)從這個(gè)文件夾中獲取icon.png資源時(shí),系統(tǒng)會(huì)不根據(jù)當(dāng)前設(shè)備密度對(duì)這張圖片進(jìn)行縮放。

  • 自動(dòng)縮放像素尺寸和位置
    應(yīng)用程序可以通過在manifest文件中設(shè)置android:anyDensity屬性為false,或者在程序代碼中把一張圖片的Bitmap對(duì)象的inScaled屬性設(shè)置為false來禁用預(yù)縮放處理。在這種情況下,系統(tǒng)將會(huì)在繪制過程中自動(dòng)縮放絕對(duì)像素位置和像素尺寸。系統(tǒng)通過這么處理來保證使用像素定義的屏幕元素與在基準(zhǔn)屏幕密度(mdpi)上顯示的物理尺寸保持大致相同。系統(tǒng)所做的這些縮放處理對(duì)于應(yīng)用程序來說是透明,應(yīng)用程序獲取到的也是縮放后的尺寸,而不是實(shí)際的物理像素尺寸。
    例如,假設(shè)一臺(tái)設(shè)備是WVGA high密度的屏幕,它的分辨率為480x800并且與傳統(tǒng)的HVGA屏幕的大小一樣,現(xiàn)在它運(yùn)行一個(gè)禁用預(yù)縮放處理的程序。在這種情況下,當(dāng)應(yīng)用程序請(qǐng)求屏幕尺寸時(shí),系統(tǒng)將會(huì)“欺騙”應(yīng)用程序,返回320x533尺寸(近似mdpi的屏幕密度)。之后,當(dāng)應(yīng)用程序執(zhí)行繪畫操作時(shí),例如廢除一個(gè)位于(10,10)到(100,100)的矩形,系統(tǒng)將會(huì)適當(dāng)轉(zhuǎn)換這個(gè)位置的值,實(shí)際上廢除的區(qū)域?yàn)?15,15)到(150,150)。如果你的應(yīng)用程序需要直接操作圖片的縮放,這個(gè)誤差可能會(huì)導(dǎo)致意想不到的結(jié)果,不過這是盡可能考慮應(yīng)用程序的性能后得出的一個(gè)合理的方案。如果你遇到這種情況,請(qǐng)參考下面將dp單位轉(zhuǎn)換為像素單位(Converting dp units to pixel units)
    通常情況下,你不應(yīng)該禁用預(yù)縮放處理。支持多樣屏幕的最好方法是遵從上面如何支持多屏幕(How to Support Multiple Screens) 章節(jié)提及的基本技術(shù)。

  • 如果你的應(yīng)用程序需要操作圖片或者需要通過其它方式在屏幕上直接與像素進(jìn)行交互,那你可能需要采取額外的步驟來支持不同的屏幕密度。例如,如果你需要根據(jù)手指在屏幕上劃過的像素點(diǎn)來識(shí)別觸摸手勢(shì)并進(jìn)行響應(yīng),你就需要采用適當(dāng)?shù)拿芏葻o關(guān)像素值來取代實(shí)際像素值。

    6.1 縮放運(yùn)行過程中創(chuàng)建的Bitmap對(duì)象(Scaling Bitmap objects created at runtime)

    如果你的應(yīng)用程序在內(nèi)存中創(chuàng)建一張圖片(一個(gè)Bitmap對(duì)象),默認(rèn)情況下系統(tǒng)會(huì)假設(shè)這張圖片是為medium這個(gè)基準(zhǔn)屏幕密度而設(shè)計(jì)的,并且在渲染的時(shí)候會(huì)自動(dòng)縮放。當(dāng)Bitmap沒有指定密度屬性時(shí),系統(tǒng)會(huì)添加“自動(dòng)縮放”屬性給Bitmap。如果你沒有正確計(jì)算當(dāng)前設(shè)備的屏幕密度并且為Bitmap對(duì)象指定相應(yīng)的密度屬性,自動(dòng)縮放會(huì)跟你沒有提供可替換資源的處理方法一樣縮放這些Bitmap圖片。

    為了控制運(yùn)行過程中創(chuàng)建的Bitmap對(duì)象是否縮放,你可以通過Bitmap的setDensity()為其指定密度類型,該方法可選參數(shù)值為DisplayMetrics類中定義的常量,例如DENSITY_HIGH或者DENSITY_LOW。

    如果你是通過BitmapFactory從文件或者數(shù)據(jù)流這些數(shù)據(jù)源創(chuàng)建了Bitmap對(duì)象,那么你可以當(dāng)做這個(gè)Bitmap對(duì)象已經(jīng)存在一樣,使用BitmapFactory.Options來設(shè)置bipmap對(duì)象的屬性,系統(tǒng)通過這些屬性來決定如何對(duì)它進(jìn)行縮放。例如,你可以設(shè)置inDensity屬性來設(shè)置bitmap對(duì)象對(duì)應(yīng)的屏幕密度,以及inScaled屬性來設(shè)置bitmap是否要通過縮放來適配當(dāng)前設(shè)備屏幕密度。

    如果你設(shè)置inScaled屬性為false,那么你就禁用了系統(tǒng)可能會(huì)對(duì)bitmap進(jìn)行的預(yù)縮放處理,系統(tǒng)在每次繪制的時(shí)候才對(duì)bitmap自動(dòng)縮放處理。使用自動(dòng)縮放來取代預(yù)處理會(huì)消耗更多的CPU,不過可以節(jié)省內(nèi)存。

    圖5: 對(duì)比預(yù)縮放和自動(dòng)縮放的bitmap

    圖5顯示了在high密度屏幕上分別加載low(120)、medium(160)、high(240)密度的bitmap時(shí),預(yù)處理縮放和自動(dòng)縮放機(jī)制的區(qū)別。可以看出其中的差異是很小的,因?yàn)樗械腷itmap都被縮放到適配當(dāng)前屏幕密度的大小,盡管被縮放的bitmap由于預(yù)縮放處理還是繪制時(shí)自動(dòng)縮放處理而有小小的顯示差異。

    注意: 在Android 3.0或更高的系統(tǒng)版本中,由于改進(jìn)了圖形框架,預(yù)縮放或者自動(dòng)縮放的bitmap顯示效果將看不出區(qū)別。

    6.2 將dp單位轉(zhuǎn)換為像素單位(Converting dp units to pixel units)

    在一些情況,你需要使用dp單位表達(dá)尺寸后再轉(zhuǎn)換為對(duì)應(yīng)的像素單位。試想一下一個(gè)應(yīng)用程序識(shí)別一個(gè)滑動(dòng)或者劃動(dòng)手勢(shì)的要求是手指至少移動(dòng)16像素。在基準(zhǔn)屏幕上要識(shí)別出這個(gè)手勢(shì),用戶至少要滑動(dòng)16 pixels/160dpi,相當(dāng)于一英寸的十分之一(2.5mm)。如果是在high密度的設(shè)備屏幕上,用戶至少要滑動(dòng)16 pixels/240dpi,相當(dāng)于一英寸的十五分之一(1.7mm)。這個(gè)距離必須足夠短,這樣用戶才能感覺這個(gè)應(yīng)用程序很靈敏。

    為了解決這個(gè)問題,手勢(shì)的觸發(fā)距離必須在代碼中用dp表示,并轉(zhuǎn)換為對(duì)應(yīng)的實(shí)際像素尺寸。例如:

    // 用dp單位表示的手勢(shì)觸發(fā)距離 private static final float GESTURE_THRESHOLD_DP = 16.0f;// 獲取屏幕密度 final float scale = getResources().getDisplayMetrics().density; // 基于屏幕密度將dp尺寸轉(zhuǎn)換為px尺寸 mGestureThreshold = (int) (GESTURE_THRESHOLD_DP * scale + 0.5f);// 使用mGestureThreshold作為手勢(shì)距離判定尺寸...

    其中DisplayMetrics.density屬性是根據(jù)當(dāng)前屏幕密度得出的縮放因子,你必須使用這個(gè)因子轉(zhuǎn)換dp單位和像素單位。在medium密度的屏幕上,DisplayMetrics.density等于1.0;在high密度的屏幕上等于1.5;在extra-high密度的屏幕上等于2.0;在low密度的屏幕上等于0.75。你必須使用這個(gè)因子的數(shù)值乘以dp單位值得出在當(dāng)前屏幕上對(duì)應(yīng)的實(shí)際像素尺寸(額外增加0.5f是為了在強(qiáng)制轉(zhuǎn)換為整數(shù)時(shí)得到較大的整數(shù)值)。更多信息,請(qǐng)參考DisplayMetrics類。

    另外,與其隨意為這類事件定義一個(gè)觸發(fā)值,你應(yīng)該使用ViewConfiguration類中的可用方法獲取預(yù)縮放的配置值。

    6.3 使用預(yù)縮放配置值(Using pre-scaled configuration values)

    你可以使用ViewConfiguration類來獲取Android系統(tǒng)使用的距離值、速度值、時(shí)間值等等。例如,系統(tǒng)框架識(shí)別滑動(dòng)操作的像素距離值可以使用getScaledTouchSlop()方法獲取:

    private static final int GESTURE_THRESHOLD_DP = ViewConfiguration.get(myContext).getScaledTouchSlop();

    使用ViewConfiguration類中以getScaled開頭的方法返回的像素值,不管當(dāng)前是什么屏幕密度,都保證能正確顯示。


    如何在多種多樣的屏幕上測(cè)試你的應(yīng)用程序(How to Test Your Application on Multiple Screens)


    在發(fā)布你的應(yīng)用程序之前,你應(yīng)該在所有支持的屏幕尺寸和屏幕密度上進(jìn)行完整測(cè)試。Android SDK中包含了很多你可以使用的仿真模擬器,這些模擬器模擬出了通用屏幕配置的尺寸和密度,而你的應(yīng)用程序很可能就會(huì)在這種環(huán)境中運(yùn)行。你同樣可以修改仿真模擬器的默認(rèn)尺寸、密度和分辨率,以模擬出一些特別屏幕的屬性。使用仿真模擬器和額外的自定義配置就能測(cè)試一些可能的屏幕配置,因此你沒有必要為了測(cè)試你的應(yīng)用程序而去購買每一種設(shè)備。

    配置應(yīng)用程序多樣屏幕支持性測(cè)試環(huán)境,你需要?jiǎng)?chuàng)建一系列AVD(Android虛擬機(jī)),可以使用默認(rèn)的仿真模擬器或者創(chuàng)建符合你的應(yīng)用程序能夠支持的屏幕尺寸密度的屏幕配置。為此,你可以使用AVD管理器來創(chuàng)建這些AVD,并通過圖形界面啟動(dòng)它們。

    圖6: 為測(cè)試屏幕支持個(gè)的系列AVD

    啟動(dòng)Android SDK管理器,在window平臺(tái)下你可以執(zhí)行Android SDK文件夾下的SDK Manager.exe文件,在其它平臺(tái)上可以執(zhí)行<sdk>/tools/目錄下的android可執(zhí)行文件。圖6展示了選中一個(gè)AVD的AVD管理器,用于測(cè)試各種各樣的屏幕配置。

    表3展示了Android SDK提供的各種各樣仿真模擬器,你可以使用這些模擬器來模擬一些常見的屏幕配置。

    表3: Android SDK提供的仿真器及各種屏幕配置(粗體顯示),還有其它一些典型分辨率。

    Low密度(120),ldpiMedium密度(160),mdpiHigh密度(240),hdpiExtra-high密度(320),xhdpi
    Small屏幕QVGA(240x320)480x640
    Normal屏幕WQVGA400(240x400)
    WQVGA432(240x432)
    HVGA(320x480)WVGA800(480x800)
    WVGA854(480x854)

    600x1024
    Large屏幕WVGA800(480x800)[1]
    WVGA854(480x854)[1]
    WVGA800(480x800)[2]
    WVGA854(480x854)[2]
    Extra-Large屏幕1024x600WXGA(1280x800)[3]
    1024x768
    1280x768
    1536x1152
    1920x1152
    1920x1200

    [1] 模擬這個(gè)配置,在創(chuàng)建AVD的時(shí)候要自定義120的密度,并且選擇WVGA800或者WVGA854的皮膚
    [2] 模擬這個(gè)配置,在創(chuàng)建AVD的時(shí)候要自定義160的密度,并且選擇WVGA800或者WVGA854的皮膚
    [3] Android 3.0平臺(tái)上才支持這個(gè)皮膚

    更多關(guān)于創(chuàng)建和使用AVD測(cè)試應(yīng)用程序的內(nèi)容情況請(qǐng)參考Managing AVDs with AVD Manager。

    查看所有支持的屏幕配置激活設(shè)備比例,請(qǐng)參考Screen Sizes and Densities。

    我們同樣建議你將模擬器的物理尺寸配置成與真實(shí)設(shè)備尺寸相近后再測(cè)試你的應(yīng)用程序。這樣更容易將模擬結(jié)果與各個(gè)尺寸和密度比較。為此,你需要知道你的計(jì)算機(jī)顯示器大致的dpi密度(例如,一個(gè)30英寸的戴爾顯示器密度大概96dpi)。當(dāng)你從AVD管理器中啟動(dòng)AVD的時(shí)候,你可以在啟動(dòng)選項(xiàng)中指定模擬器的屏幕尺寸和顯示器的dpi,如圖7:

    圖7 從AVD管理器中啟動(dòng)AVD時(shí),你可以設(shè)置的尺寸和密度選項(xiàng)

    如果你想要在內(nèi)建模擬器皮膚支持的分辨率或密度之外的屏幕上測(cè)試你的應(yīng)用程序,你可以通過自定義分辨率和密度來創(chuàng)建一個(gè)AVD。當(dāng)使用AVD管理器創(chuàng)建AVD的時(shí)候不要選擇內(nèi)建的皮膚,自己指定分辨率。

    如果你使用命令行啟動(dòng)你的AVD,你可以通過-scale選項(xiàng)為模擬器指定縮放因子,例如:

    emulator -avd <avd_name> -scale 96dpi

    為了精簡(jiǎn)模擬器的尺寸,你也可以為-scale選項(xiàng)傳遞一個(gè)0.1到3之間的數(shù)值,它代表期望的縮放因子。

    更多關(guān)于從命令行創(chuàng)建AVD模擬器的內(nèi)容,請(qǐng)參考Managing AVDs from the Command Line。

    總結(jié)

    以上是生活随笔為你收集整理的Android的屏幕多样性支持的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    国产护士av | 国产午夜精品在线 | 在线激情av电影 | 天天操天天艹 | 精品国产乱码久久久久久天美 | 欧美激情xxxx| 国产精品免费成人 | 国产在线精品一区 | 狠狠操.com | 91传媒在线播放 | 国产精品手机播放 | 伊人久久一区 | 久久久久中文字幕 | 九草视频在线 | 免费观看福利视频 | 中文字幕二区 | www.久草视频| 97精品国产91久久久久久久 | 亚洲欧洲av | 亚洲精品久久久久久久不卡四虎 | 国产精品免费人成网站 | 亚洲国内精品在线 | 精品美女久久久久 | 亚洲成色777777在线观看影院 | 国产亚洲欧美日韩高清 | 午夜 免费 | 手机av电影在线观看 | 丝袜制服天堂 | 久久久久国产视频 | 久久久久久久久久网站 | 中文字幕高清有码 | 欧美激情精品一区 | 国产香蕉视频在线播放 | 狠狠搞,com | 久久老司机精品视频 | 91麻豆免费版 | 一级片免费观看视频 | 久久精品国产亚洲 | 91麻豆精品国产91 | 欧美日韩二三区 | 夜夜爽夜夜操 | 99九九免费视频 | 亚洲美女在线国产 | 二区中文字幕 | av中文字幕免费在线观看 | 国产精品一区二区无线 | 亚洲激情一区二区三区 | 91成人在线观看喷潮 | 久久综合九色欧美综合狠狠 | 麻豆成人精品 | 91av在线不卡 | 久久综合色8888 | 日本一区二区三区视频在线播放 | 久草网首页| 欧美影院久久 | 国产视频不卡一区 | 亚洲三级在线 | 色综合久久久久久久久五月 | 国产视频黄 | 久久99国产一区二区三区 | 狠狠做深爱婷婷综合一区 | 精品av网站 | 美女免费网站 | 黄色软件在线看 | av九九九| 99精品国产亚洲 | 色偷偷888欧美精品久久久 | 成人一级电影在线观看 | 91九色成人蝌蚪首页 | 精品久久久久久久久中文字幕 | 久久a免费视频 | 亚洲伦理一区二区 | 日韩av三区 | 最近免费中文字幕大全高清10 | 91大神精品视频 | 日韩色视频在线观看 | 超碰在线日韩 | 91麻豆精品国产91久久久久久久久 | 激情欧美一区二区免费视频 | 久久9视频 | 成片免费 | 国产伦精品一区二区三区… | 国产短视频在线播放 | 国产尤物视频在线 | 97超碰国产精品女人人人爽 | 在线免费黄 | 亚洲免费激情 | 一级精品视频在线观看宜春院 | 国产精品麻豆一区二区三区 | 中文字幕刺激在线 | 国产精品美女免费视频 | 99在线观看免费视频精品观看 | 国产精品美女久久久久久网站 | 在线观看一级片 | 国产精品 国产精品 | 亚洲资源视频 | a视频在线观看免费 | 天天色宗合 | 综合久久精品 | 人人爽人人爽人人片 | 色婷婷激情五月 | 激情丁香5月| 午夜丁香视频在线观看 | 天天搞天天干 | 亚洲片在线观看 | 成人国产一区二区 | 国产精品不卡在线观看 | 国产91学生粉嫩喷水 | 伊人国产在线观看 | 91在线播放国产 | 欧美成年性| 亚洲精品动漫久久久久 | 丝袜美腿一区 | 亚洲日本一区二区在线 | 日本一区二区三区免费看 | 欧美日韩免费一区二区 | 人人澡人 | www欧美色 | 97超碰人人在线 | 日韩精品中文字幕一区二区 | 中文字幕成人网 | 欧美 日韩 视频 | 激情五月婷婷综合网 | 欧美在线视频一区二区三区 | 中文亚洲欧美日韩 | 精品国产一区二 | 成人h电影在线观看 | 久久观看最新视频 | 亚洲精品在线观看免费 | 在线观看精品视频 | 在线观看视频三级 | 日韩精品一区二区三区三炮视频 | 午夜在线国产 | 婷婷丁香狠狠爱 | 中文字幕在线观看日本 | 播五月综合| 亚洲男男gⅴgay双龙 | 欧美午夜性生活 | 天天摸日日摸人人看 | 日韩成人精品在线观看 | 一区二区三区四区不卡 | 91色一区二区三区 | 一区二区三区四区五区在线 | 999电影免费在线观看2020 | 日韩黄色一级电影 | 操操操日日日 | 热久久在线视频 | 免费高清av在线看 | 国产精品破处视频 | 亚洲在线视频播放 | 亚洲免费av观看 | 999成人免费视频 | 91视频在线国产 | 久久99久久99精品中文字幕 | 久久视频这里有久久精品视频11 | 丁香六月av| 黄色片软件网站 | 狠色狠色综合久久 | 亚洲激情中文 | 99久久99| 91免费视频国产 | 成人在线播放免费观看 | 在线观看成人国产 | 国精产品满18岁在线 | 91精品国产亚洲 | 国产999精品久久久久久麻豆 | 人人草人 | 精品久久久久_ | www.黄色片网站 | 久久久久麻豆v国产 | 麻豆国产视频下载 | 免费在线观看午夜视频 | 国产精品videossex国产高清 | 久久久久亚洲最大xxxx | 欧美色噜噜 | 亚洲一二视频 | 亚洲理论在线观看 | 国产成人av网 | 成人精品亚洲 | 伊人成人激情 | 69精品久久久| 久久专区 | 国产99久久九九精品免费 | 天天操天天操天天操 | 日本黄色免费大片 | 91看片看淫黄大片 | 在线观看免费观看在线91 | 免费视频黄色 | 91免费网址 | 久久开心激情 | 久章草在线观看 | 久久精品欧美日韩精品 | 91精品福利在线 | 国模精品一区二区三区 | av片在线观看 | 成人性生交大片免费观看网站 | 日韩视频1区 | 免费国产在线观看 | 黄色的视频网站 | 黄色三级免费 | 国产精品一区二区62 | 91麻豆国产 | 免费a一级 | 91桃色在线观看视频 | 五月开心婷婷 | 中国一级片在线观看 | 999视频网站 | 91精品成人久久 | 日日草天天干 | 五月天视频网站 | 色com| 精品久久久久一区二区国产 | 91麻豆精品国产自产在线游戏 | 黄色精品免费 | 97电院网手机版 | 日韩欧美一区二区在线 | 伊人婷婷激情 | 曰本三级在线 | 国产日韩在线视频 | 亚洲一区 影院 | 麻豆一区在线观看 | 国产毛片久久 | 国产精品嫩草69影院 | 五月婷色 | 久草在线网址 | 国产高清在线a视频大全 | 天天射天天做 | 高清精品在线 | 911av视频| 国内视频在线观看 | 亚洲成人网在线 | 91精品视频观看 | 国产日韩欧美在线播放 | 综合久久精品 | 成人av片在线观看 | 久久精品中文字幕一区二区三区 | 国产精品成人品 | 中文字幕字幕中文 | 超碰97av在线 | 91精品国产91久久久久久三级 | a在线视频v视频 | 国产呻吟在线 | av网站在线免费观看 | 久久综合精品国产一区二区三区 | 久久久久免费 | 国产精品一区专区欧美日韩 | 免费黄色a级毛片 | 美女久久一区 | 国产精品尤物视频 | 97人人模人人爽人人少妇 | 99精品国产成人一区二区 | 婷婷综合视频 | 亚洲日本va中文字幕 | 青草视频免费观看 | 亚洲日韩欧美一区二区在线 | 曰本免费av| 人九九精品 | 日韩精品一区二区电影 | 麻豆久久久久 | 人人干人人添 | 亚洲一区二区三区四区在线视频 | 久久久久一区 | 国产午夜三级一二三区 | 久久www免费人成看片高清 | 婷婷去俺也去六月色 | 国产999精品久久久久久 | 日本女人的性生活视频 | 麻豆一区二区三区视频 | 日本黄色片一区二区 | 国产成人精品久久二区二区 | 欧美综合久久久 | 日韩精品一区二区三区中文字幕 | 国产一二三区在线观看 | 国产涩图| 日韩中文字幕亚洲一区二区va在线 | a级国产乱理论片在线观看 特级毛片在线观看 | 综合视频在线 | 成人av动漫在线观看 | 久久999精品 | 国产亚洲精品电影 | 日韩av电影中文字幕在线观看 | 日日夜夜天天综合 | 国产精品高潮久久av | 99免在线观看免费视频高清 | 人人干干人人 | 亚洲久草视频 | 亚洲免费专区 | 久久字幕精品一区 | 国产精品视频99 | 国产免费中文字幕 | 黄色一区二区在线观看 | 久久久久久久综合色一本 | 国产精品久久久久一区二区 | 狠狠的干狠狠的操 | 91爱爱电影 | 亚洲三级黄色 | 精品在线观| 日韩69视频| 久久午夜电影网 | 中文字幕在线免费97 | 国产一二三四在线视频 | 国产精品正在播放 | 亚洲精品福利在线观看 | 天天干夜夜夜 | av黄色av | 久久久伊人网 | 国产在线传媒 | 一区二区三区中文字幕在线观看 | 国产在线观看a | 国产.精品.日韩.另类.中文.在线.播放 | 久久国产免费 | 美女黄频视频大全 | 国产精品久久片 | 亚洲一区视频在线播放 | 美女视频黄网站 | 亚洲成人免费在线观看 | 国产原创在线 | 亚洲精品国偷拍自产在线观看 | 久久久99精品免费观看乱色 | 毛片无卡免费无播放器 | 国产成人av在线 | 香蕉影视 | 色综合久久中文综合久久牛 | 在线观看视频你懂得 | 六月天色婷婷 | 最近高清中文字幕 | 成人国产精品免费观看 | av电影免费在线看 | 亚洲综合欧美日韩狠狠色 | 九九热只有精品 | 日韩精品中文字幕在线观看 | 久久久久 免费视频 | 日韩视频一区二区三区在线播放免费观看 | 日日天天av| 狠狠色综合欧美激情 | 91香蕉视频黄色 | 色中文字幕在线观看 | 国产午夜精品一区二区三区在线观看 | 992tv人人网tv亚洲精品 | 一级一片免费看 | 日日摸日日 | 91久久久久久久一区二区 | 国产精品s色 | 青青河边草观看完整版高清 | 日本乱视频| 91成人网在线观看 | 日本久久久亚洲精品 | 五月婷婷色综合 | 91观看视频 | 欧美精品在线观看 | a级国产乱理伦片在线观看 亚洲3级 | 99热精品国产 | 一区二区三区高清在线观看 | 久久成人在线 | 久草.com| 91传媒激情理伦片 | 黄色片免费电影 | 激情网站网址 | 香蕉在线播放 | 久久久久成人精品 | 精品久久在线 | 欧美成人久久 | 色妞色视频一区二区三区四区 | 国产福利免费在线观看 | 麻豆视频免费观看 | 4438全国亚洲精品在线观看视频 | 国产精品视频免费在线观看 | 久久69精品久久久久久久电影好 | 黄污网站在线 | 激情五月综合 | 中文字幕视频网站 | 成人在线观看资源 | 久久国产免费视频 | 久久精品视频网 | 国产18精品乱码免费看 | 激情欧美一区二区免费视频 | 91完整版在线观看 | 日韩视频在线播放 | 99久久夜色精品国产亚洲96 | 国产人成在线视频 | av电影在线不卡 | 国产成人一区三区 | 色小说av| 91精品国产99久久久久久红楼 | 玖玖视频在线 | 亚洲成人精品在线观看 | 久久视频这里有精品 | 久久精品综合一区 | 国产成人免费观看久久久 | 亚洲精品日韩一区二区电影 | 亚洲九九 | 亚洲高清在线 | 91精品区 | 国产韩国日本高清视频 | 免费在线观看视频a | 91九色网址 | 久久在线看 | 国产中文字幕三区 | 午夜精品久久久久久久99婷婷 | 成人xxxx | 国产精品一区二区三区观看 | av免费看在线 | 最新日韩视频 | 国产美女在线精品免费观看 | 中文字幕在线播放一区 | 日本aaaa级毛片在线看 | 黄色的视频 | 亚洲欧洲精品一区二区 | 日韩欧美国产免费播放 | 天天操天天操天天爽 | 青青看片| 中文字幕在线观看网站 | 97成人精品视频在线观看 | 精品久久久久国产 | 久久久国产网站 | 最近中文字幕在线 | 最新真实国产在线视频 | 亚洲欧美一区二区三区孕妇写真 | 黄色电影在线免费观看 | 一区二区三区四区五区在线 | 欧美一级性生活片 | 九色精品在线 | 久久久九九 | 国产午夜精品久久 | 又黄又刺激 | 成人在线观看免费视频 | 国产麻豆精品久久一二三 | 精品在线观看一区二区 | 久久国产精品免费视频 | 免费大片av | 日韩av影片在线观看 | 麻豆视频国产精品 | www.久艹 | 一区二区不卡 | 日韩综合在线观看 | 毛片一区二区 | 国产第一页福利影院 | 色婷婷视频在线 | 国产又粗又猛又色 | 天天操人人干 | a v在线观看| 黄色成人91 | 欧美黄在线 | 国产九九九精品视频 | 国产精品午夜在线 | 毛片精品免费在线观看 | 国产va在线 | 欧美精品久久久久久久免费 | 91精品国产一区二区三区 | 97人人看| 91精品国产电影 | 精品麻豆入口免费 | 一级欧美一级日韩 | 日韩av在线资源 | 免费在线观看av的网站 | 国产视频在线一区二区 | 美女网站视频久久 | 亚洲影视九九影院在线观看 | 在线成人观看 | 成人资源在线观看 | 国产专区视频在线观看 | 国产精品99精品 | 综合影视| 日本在线观看一区二区三区 | 欧美一级在线观看视频 | 激情网在线视频 | 91亚色视频 | 久久大片 | 国产小视频在线免费观看 | 婷婷丁香在线观看 | 99视频在线看| 色婷婷精品 | 日日爽日日操 | 伊人久久在线观看 | 精品免费99久久 | 免费精品国产va自在自线 | 激情av综合 | 国产这里只有精品 | 亚洲资源一区 | 激情久久婷婷 | 国产精品毛片久久 | 日本精品视频网站 | 2022久久国产露脸精品国产 | 日韩中文字幕免费视频 | 亚洲第二色 | av夜夜操 | 激情一区二区三区欧美 | 97精品伊人 | 国产97在线观看 | 国产精品亚洲人在线观看 | 久久人人爽人人片 | 有没有在线观看av | 日本性视频| 精品久久久久久久久久久院品网 | 亚洲欧美日本一区二区三区 | 又湿又紧又大又爽a视频国产 | 一级黄视频 | 国产精品99久久免费黑人 | 中文字幕a∨在线乱码免费看 | av片在线观看免费 | 久久国内免费视频 | 综合在线色 | 91视频免费 | 国色天香第二季 | 久久一及片 | 国产激情电影综合在线看 | 国产亚洲精品女人久久久久久 | 人人干免费 | 1000部国产精品成人观看 | 中文字幕日韩国产 | 国产亚洲情侣一区二区无 | av网站手机在线观看 | 少妇bbw搡bbbb搡bbbb | 成人国产精品 | 99福利片 | 在线免费国产 | 麻豆传媒视频在线 | 亚洲天堂自拍视频 | 天天·日日日干 | 亚洲伊人成综合网 | 在线观看亚洲精品 | 日韩天堂网| 在线观看免费国产小视频 | 91精品视频在线看 | 国产区精品视频 | 欧美黄色高清 | 狠狠躁天天躁综合网 | 国产原创av片 | 日韩高清在线一区二区 | 免费福利视频导航 | 国产精品一区二区三区在线 | 中文网丁香综合网 | 午夜av在线播放 | 99久高清在线观看视频99精品热在线观看视频 | 日韩电影在线观看中文字幕 | 久久人人97超碰精品888 | 国产小视频免费在线观看 | 精品国产成人av在线免 | 久久这里只有精品9 | 最新日韩电影 | 中文av网站 | www一起操 | 97超在线视频 | 久久曰视频| 天天射天天爽 | 精品久久久久久国产 | www狠狠操| 色婷婷一区| 91午夜精品| 国产一级精品视频 | 波多野结衣一区二区三区中文字幕 | 亚洲精品视频在线观看网站 | 天天在线视频色 | 日韩性片 | 激情网第四色 | 国产xxxx| 欧美日韩高清一区二区 国产亚洲免费看 | 中文字幕一区二区三区四区 | 天天亚洲| www免费网站在线观看 | 很黄很色很污的网站 | 日韩av美女| 久久久久在线视频 | 深夜视频久久 | 国产精品美女久久久网av | 欧美精品久久久久久 | 18久久久久久 | 亚洲在线精品视频 | 国产一级二级在线观看 | 日本中文字幕在线视频 | 色综合久久久久综合99 | 777xxx欧美 | 久久国产免费视频 | 久久五月婷婷综合 | 天天天干天天射天天天操 | 中文字幕二区 | 日韩激情中文字幕 | 久久精品99国产精品 | av中文字幕在线免费观看 | 亚洲天堂精品视频 | 天天干天天操天天入 | 欧美国产91| 福利一区视频 | 国产手机av在线 | 2019中文字幕第一页 | 国产一区私人高清影院 | 91网站在线视频 | 国产精品区一区 | 国产精品午夜在线 | 精品久久久99 | 久久综合九色九九 | 免费视频97 | 日韩欧美极品 | 黄色免费视频在线观看 | 在线精品观看 | 亚洲精品午夜视频 | 国产成人av电影在线观看 | 国产成人综 | 久久久久久蜜av免费网站 | 国产免费区 | 日日夜夜爱 | 五月婷婷中文网 | 97人人爽 | 五月婷婷综合久久 | 免费黄a大片 | 深爱婷婷久久综合 | 亚洲男人天堂2018 | 99视频一区二区 | 日韩网站在线看片你懂的 | 国产精品久久久久影院 | 亚洲资源在线网 | 福利视频导航网址 | 激情五月看片 | 国产电影黄色av | av片子在线观看 | 少妇bbw撒尿 | 中文字幕在线观看第三页 | 久久精品成人欧美大片古装 | 久久国产经典视频 | 久久精品亚洲一区二区三区观看模式 | 99在线观看免费视频精品观看 | 日韩av免费在线看 | 在线观看黄a | 久久精品99国产精品日本 | 国产91对白在线播 | jizzjizzjizz亚洲| 免费一级特黄录像 | 超级碰碰视频 | 日韩av一区二区在线播放 | 日韩啪啪小视频 | 成人午夜电影久久影院 | 嫩草伊人久久精品少妇av | 人人干免费| 五月婷婷综合色拍 | 91看片成人 | 精品一二三四五区 | 国产精品国产亚洲精品看不卡 | 国产一级片直播 | 久久久久久久国产精品影院 | 久久成人国产精品一区二区 | 在线视频 亚洲 | 亚洲免费色 | 一级片视频在线 | 狠狠躁夜夜a产精品视频 | 91桃色免费观看 | 天天操婷婷| 久久精品视频在线观看免费 | 亚洲精品国偷拍自产在线观看蜜桃 | 在线观看av国产 | 99精品国自产在线 | 视频二区在线 | av官网| 亚洲网久久 | 亚洲精品国产综合99久久夜夜嗨 | 免费观看视频的网站 | 黄色av大片 | 国产精品色 | 午夜精品av | 不卡的av在线播放 | 日韩精品视频在线免费观看 | 欧美一级片在线免费观看 | 最近中文字幕免费观看 | 91tv国产成人福利 | 日韩午夜电影网 | 国产99一区视频免费 | 日本中文在线观看 | 国产一级免费在线观看 | 不卡的av在线播放 | 国产亚洲精品久久久久久久久久 | 国产精品va在线播放 | 日韩性xxxx | 久草在线视频看看 | 日韩精品电影在线播放 | 久草在线费播放视频 | 亚洲综合视频在线播放 | 亚洲久久视频 | 天天人人综合 | 国产精品成久久久久三级 | 精品久久一区二区三区 | 夜夜操天天干, | 久草在线中文视频 | 国产高清av免费在线观看 | 亚洲成人第一区 | 特黄特黄的视频 | 日韩欧美在线一区 | 中文字幕第一页av | 视频在线观看日韩 | 一区二区精品视频 | 国产日韩视频在线播放 | 国产手机免费视频 | 日本狠狠色 | 日韩精品一区二区三区在线播放 | 欧美一二三四在线 | 天堂av观看| 五月亚洲综合 | 麻豆传媒视频在线免费观看 | 91在线视频免费观看 | 午夜精品福利一区二区三区蜜桃 | 国产视频导航 | 久久在视频 | 日本中文字幕高清 | 午夜免费视频网站 | 亚洲精品国产精品国自产观看 | 国产区精品在线 | 99精品国产福利在线观看免费 | 黄色天堂在线观看 | 9i看片成人免费看片 | 7777精品伊人久久久大香线蕉 | www.在线观看av| 国产中文字幕一区二区三区 | 亚洲理论在线观看 | 香蕉久久久久久久 | 天天操天天曰 | 日韩在线电影观看 | 日韩免费电影在线观看 | 999久久久久 | 91在线www | 国产视频1区2区3区 久久夜视频 | 91在线入口| 91精品国产乱码在线观看 | 成人夜晚看av | 视频国产一区二区三区 | 在线观看岛国av | 国产一区欧美日韩 | 国产精品剧情在线亚洲 | 亚洲欧美视频在线播放 | 亚洲欧美一区二区三区孕妇写真 | 亚洲高清不卡av | 66av99精品福利视频在线 | 亚洲精品国精品久久99热一 | 色婷婷国产在线 | 911免费视频 | 亚洲免费av网站 | 亚洲一区二区三区在线看 | 狠狠伊人| 青青久视频 | 丁香婷婷在线 | 人人舔人人 | 日韩极品视频在线观看 | 91在线永久| 国产美女无遮挡永久免费 | 国产精品久久一区二区三区, | 黄色一级大片在线免费看国产一 | 97视频一区 | 伊人天天干 | 中文字幕在线视频一区二区 | 欧美色图30p| 国产又粗又猛又爽 | 日韩在线观看一区二区 | 丁香久久久 | 在线精品在线 | 99精品久久久久久久 | 久久精品99 | 欧美日韩在线第一页 | 成人a大片 | 亚洲国产资源 | 亚洲精品乱码久久久久久高潮 | 亚洲影视九九影院在线观看 | 色婷婷久久一区二区 | www.天天干.com| 九色最新网址 | 精品国模一区二区 | 最新日韩视频在线观看 | 激情影院在线观看 | 亚洲午夜久久久久久久久 | 在线一级片 | 国产大陆亚洲精品国产 | 国产精品视频 | 91中文字幕在线播放 | 国产午夜精品福利视频 | 亚洲国产日韩一区 | 免费av一级电影 | 在线91观看 | 久久久久久久久久久久久影院 | 日韩精品一区二区在线视频 | 久久久高清免费视频 | 日韩av网页 | 欧美精品资源 | 色多视频在线观看 | 日日爱夜夜爱 | 亚洲精品小视频 | 国产手机视频精品 | 在线观看黄网站 | 午夜国产一区 | 久久久资源 | 久久精品99精品国产香蕉 | 久久免费看a级毛毛片 | 免费男女网站 | 国产一级片一区二区三区 | 国产一级二级三级视频 | 91丨精品丨蝌蚪丨白丝jk | 色爽网站| 99精品视频一区二区 | av三级在线看 | 精品自拍sae8—视频 | 国产精品xxxx18a99 | 久久视频国产精品免费视频在线 | 久热爱 | 久久久国产99久久国产一 | 久久公开视频 | 久久久久久久久久久精 | 亚洲成人一区 | 91成人精品在线 | 中文字幕在线免费观看 | 国产精品久久视频 | 97人人精品| 中文字幕一区三区 | 99久久婷婷国产一区二区三区 | 91久久一区二区 | 亚洲人成网站精品片在线观看 | 中文字幕精品一区二区精品 | 国产韩国精品一区二区三区 | 91爱爱视频 | 日韩免费在线一区 | 激情小说网站亚洲综合网 | 国产精品9999久久久久仙踪林 | 激情网站网址 | 欧美激情va永久在线播放 | 一本一本久久a久久精品综合妖精 | 国产91综合一区在线观看 | 久草精品视频在线观看 | 中文字幕永久 | 成人av中文字幕 | 一级一片免费观看 | 日韩国产精品久久久久久亚洲 | 国产96在线观看 | 亚洲国产日韩欧美 | 色综合小说 | 丁香在线观看完整电影视频 | 91精品国产综合久久福利 | 韩日精品在线观看 | 免费看国产视频 | 中文字幕免费观看全部电影 | 日韩电影在线观看一区 | 亚洲精品视频免费在线观看 | 探花视频免费观看高清视频 | 少妇高潮冒白浆 | 一区二区三区四区精品 | 91免费视频网站在线观看 | 三级免费黄 | 综合网伊人 | 午夜视频在线观看一区二区三区 | 91成人精品一区在线播放 | 国产在线专区 | 国产一区二区三区四区大秀 | 91丨九色丨蝌蚪丨对白 | 欧美色一色 | 国产成人一区三区 | 黄色片免费在线 | 99久久99久国产黄毛片 | 欧美性生活小视频 | 国产精品久久久久国产精品日日 | 久久天天躁狠狠躁亚洲综合公司 | www.黄色片.com| 国产精品s色| 在线视频婷婷 | 国产精品久久嫩一区二区免费 | 欧美日韩aa | 国产98色在线 | 日韩 | 亚洲伦理电影在线 | 国产男女爽爽爽免费视频 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 国产美女精彩久久 | www.com黄色| 亚洲精品在线观看网站 | 婷婷丁香色综合狠狠色 | 国内精品久久久久久久 | 91视频麻豆视频 | av免费网页 | 在线精品一区二区 | 久久精品一二三 | 天天亚洲 | 久久精品视频在线 | av在线免费不卡 | 一区二区亚洲精品 | 99精品国产兔费观看久久99 | 久久av观看 | 久久激情片 | 久久精品视频在线观看免费 | 激情综合交 | 亚洲少妇久久 | 五月开心六月婷婷 | av色综合网 | 中文字幕在线观看一区二区 | 日本久久久久久久久 | 久久久国产精品久久久 | www.午夜色.com | 久久精国产 | 久久婷婷久久 | 国产中文视 | 黄色的片子 | 黄色的网站在线 | 91亚洲成人 | 亚洲激情在线播放 | 亚洲综合最新在线 | 99热只有精品在线观看 | 免费福利视频网站 | 免费精品视频在线 | 日韩成人精品 | 精品婷婷 | 97色婷婷成人综合在线观看 | www.香蕉 | 粉嫩一二三区 | 天天要夜夜操 | 午夜精品福利在线 | 亚洲三级影院 | 免费黄色在线播放 | 九九视频免费观看视频精品 | 免费一级片在线 | a v在线视频| 国产高清视频免费观看 | 99人成在线观看视频 | 韩日成人av | 国产专区欧美专区 | 久久综合欧美精品亚洲一区 | 香蕉久草| 久免费视频 | 国产一二三四在线视频 | 操操操夜夜操 | 天天爱天天射天天干天天 | 国产视频一区精品 | 久久久精品日本 | 色婷婷综合视频在线观看 | 99人久久精品视频最新地址 | 国产日韩欧美网站 | 日日干影院| 四虎永久免费在线观看 | 青青久草在线 | 91精品国产福利在线观看 | 国产一二三在线视频 | 五月婷婷丁香激情 | 精品xxx | 在线视频 亚洲 | 色婷婷丁香 | 精品国产伦一区二区三区观看体验 | 亚洲国产精品久久久久婷婷884 | 最近2019中文免费高清视频观看www99 | 三级黄色片在线观看 | 国产精品午夜8888 | 99精品免费久久久久久日本 | 成人动漫一区二区三区 | 99r在线视频| 成人一区影院 | 亚洲欧美成人在线 | 黄色成人在线网站 | av天天干 | 日本中文字幕在线免费观看 | 黄网站a| 69av国产| 狠狠五月婷婷 | 久久综合狠狠综合久久激情 | 色婷婷综合五月 | 激情www| 久久国产片 | 亚洲欧美精品一区 | 亚洲国产成人在线 | 日韩av看片 | www.99在线观看 | 天天操狠狠操网站 | 欧美日韩国产在线一区 | 久久久久久久久久久国产精品 | 欧美激情综合网 | 精品视频在线免费 | 欧美日韩在线视频一区 | 亚洲免费观看视频 | 久久精品aaa | 园产精品久久久久久久7电影 | 久久综合五月天婷婷伊人 | 亚洲黄色av网址 | 三级av黄色 | 国产精品一区二区久久精品爱微奶 | 在线激情av电影 | 欧美视频不卡 | 婷婷精品 | 亚洲区二区| 狠狠色丁香婷婷综合久小说久 | 天天爱天天射天天干天天 | 亚洲一区 影院 | 黄a在线| 六月丁香激情综合 | 在线观看网站黄 | 夜夜躁日日躁狠狠躁 | 欧美日韩中文视频 | 久久国产视频网站 | 亚洲高清视频在线播放 | 17videosex性欧美| 久久久久99999 | 久久精品五月 | 国产尤物在线视频 | 黄色高清视频在线观看 | 黄色网中文字幕 | 高清免费在线视频 | 久草在线久草在线2 | 2018精品视频| 在线一二三四区 | 青青河边草免费观看完整版高清 | 国产成人精品一区在线 | 国产精品大片在线观看 |