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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android屏幕适配全攻略(最权威的官方适配指导) (转)

發布時間:2024/1/17 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android屏幕适配全攻略(最权威的官方适配指导) (转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

招聘信息:
  • Cocos2d-X 前端主程
  • 【新浪微博】手機客戶端iOS研發工程師 20k-40k
  • iOS 開發工程師
  • iOS高級開發工程師(中國排名第一的企業級移動互聯網云計算公司 和創科技 紅圈營銷)
  • 交互設計師(UE/產品)
  • iOS
  • iOS高級開發工程師
  • 資深iOS工程師
  • iOS研發工程師
  • iOS開發工程師
  • UI設計師

?

Android屏幕適配出現的原因

在我們學習如何進行屏幕適配之前,我們需要先了解下為什么Android需要進行屏幕適配。

由于Android系統的開放性,任何用戶、開發者、OEM廠商、運營商都可以對Android進行定制,修改成他們想要的樣子。

但是這種“碎片化”到底到達什么程度呢?

在2012年,OpenSignalMaps(以下簡稱OSM)發布了第一份Android碎片化報告,統計數據表明,

  • 2012年,支持Android的設備共有3997種。

  • 2013年,支持Android的設備共有11868種。

  • 2014年,支持Android的設備共有18796種。

下面這張圖片所顯示的內容足以充分說明當今Android系統碎片化問題的嚴重性,因為該圖片中的每一個矩形都代表著一種Android設備。

而隨著支持Android系統的設備(手機、平板、電視、手表)的增多,設備碎片化、品牌碎片化、系統碎片化、傳感器碎片化和屏幕碎片化的程度也在不斷地加深。而我們今天要探討的,則是對我們開發影響比較大的——屏幕的碎片化。

下面這張圖是Android屏幕尺寸的示意圖,在這張圖里面,藍色矩形的大小代表不同尺寸,顏色深淺則代表所占百分比的大小。

而與之相對應的,則是下面這張圖。這張圖顯示了IOS設備所需要進行適配的屏幕尺寸和占比。

當然,這張圖片只是4,4s,5,5c,5s和平板的尺寸,現在還應該加上新推出的iphone6和plus,但是和Android的屏幕碎片化程度相比而言,還是差的太遠。

詳細的統計數據請到這里查看。

現在你應該很清楚為什么要對Android的屏幕進行適配了吧?屏幕尺寸這么多,為了讓我們開發的程序能夠比較美觀的顯示在不同尺寸、分辨率、像素密度(這些概念我會在下面詳細講解)的設備上,那就要在開發的過程中進行處理,至于如何去進行處理,這就是我們今天的主題了。

但是在開始進入主題之前,我們再來探討一件事情,那就是Android設備的屏幕尺寸,從幾寸的智能手機,到10寸的平板電腦,再到幾十寸的數字電視,我們應該適配哪些設備呢?

其實這個問題不應該這么考慮,因為對于具有相同像素密度的設備來說,像素越高,尺寸就越大,所以我們可以換個思路,將問題從單純的尺寸大小轉換到像素大小和像素密度的角度來。

下圖是2014年初,友盟統計的占比5%以上的6個主流分辨率,可以看出,占比最高的是480*800,320*480的設備竟然也占據了很大比例,但是和半年前的數據相比較,中低分辨率(320*480、480*800)的比例在減少,而中高分辨率的比例則在不斷地增加。雖然每個分辨率所占的比例在變化,但是總的趨勢沒變,還是這六種,只是分辨率在不斷地提高。

所以說,我們只要盡量適配這幾種分辨率,就可以在大部分的手機上正常運行了。

當然了,這只是手機的適配,對于平板設備(電視也可以看做是平板),我們還需要一些其他的處理。

好了,到目前為止,我們已經弄清楚了Android開發為什么要進行適配,以及我們應該適配哪些對象,接下來,終于進入我們的正題了!

首先,我們先要學習幾個重要的概念。

重要概念

  • 什么是屏幕尺寸、屏幕分辨率、屏幕像素密度?

  • 什么是dp、dip、dpi、sp、px?他們之間的關系是什么?

  • 什么是mdpi、hdpi、xdpi、xxdpi?如何計算和區分?

在下面的內容中我們將介紹這些概念。

屏幕尺寸

屏幕尺寸指屏幕的對角線的長度,單位是英寸,1英寸=2.54厘米

比如常見的屏幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等

屏幕分辨率

屏幕分辨率是指在橫縱向上的像素點數,單位是px,1px=1個像素點。一般以縱向像素*橫向像素,如1960*1080。

屏幕像素密度

屏幕像素密度是指每英寸上的像素點數,單位是dpi,即“dot per inch”的縮寫。屏幕像素密度與屏幕尺寸和屏幕分辨率有關,在單一變化條件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。

dp、dip、dpi、sp、px

px我們應該是比較熟悉的,前面的分辨率就是用的像素為單位,大多數情況下,比如UI設計、Android原生API都會以px作為統一的計量單位,像是獲取屏幕寬高等。

dip和dp是一個意思,都是Density Independent Pixels的縮寫,即密度無關像素,上面我們說過,dpi是屏幕像素密度,假如一英寸里面有160個像素,這個屏幕的像素密度就是160dpi,那么在這種情況下,dp和px如何換算呢?在Android中,規定以160dpi為基準,1dip=1px,如果密度是320dpi,則1dip=2px,以此類推。

假如同樣都是畫一條320px的線,在480*800分辨率手機上顯示為2/3屏幕寬度,在320*480的手機上則占滿了全屏,如果使用dp為單位,在這兩種分辨率下,160dp都顯示為屏幕一半的長度。這也是為什么在Android開發中,寫布局的時候要盡量使用dp而不是px的原因。

而sp,即scale-independent pixels,與dp類似,但是可以根據文字大小首選項進行放縮,是設置字體大小的御用單位。

mdpi、hdpi、xdpi、xxdpi

其實之前還有個ldpi,但是隨著移動設備配置的不斷升級,這個像素密度的設備已經很罕見了,所在現在適配時不需考慮。

mdpi、hdpi、xdpi、xxdpi用來修飾Android中的drawable文件夾及values文件夾,用來區分不同像素密度下的圖片和dimen值。

那么如何區分呢?Google官方指定按照下列標準進行區分:

在進行開發的時候,我們需要把合適大小的圖片放在合適的文件夾里面。下面以圖標設計為例進行介紹。

在設計圖標時,對于五種主流的像素密度(MDPI、HDPI、XHDPI、XXHDPI 和 XXXHDPI)應按照 2:3:4:6:8 的比例進行縮放。例如,一個啟動圖標的尺寸為48x48 dp,這表示在 MDPI 的屏幕上其實際尺寸應為 48x48 px,在 HDPI 的屏幕上其實際大小是 MDPI 的 1.5 倍 (72x72 px),在 XDPI 的屏幕上其實際大小是 MDPI 的 2 倍 (96x96 px),依此類推。

雖然 Android 也支持低像素密度 (LDPI) 的屏幕,但無需為此費神,系統會自動將 HDPI 尺寸的圖標縮小到 1/2 進行匹配。

下圖為圖標的各個屏幕密度的對應尺寸:

解決方案

支持各種屏幕尺寸

使用wrap_content、match_parent、weight

要確保布局的靈活性并適應各種尺寸的屏幕,應使用 “wrap_content” 和 “match_parent” 控制某些視圖組件的寬度和高度。

使用 “wrap_content”,系統就會將視圖的寬度或高度設置成所需的最小尺寸以適應視圖中的內容,而 “match_parent”(在低于 API 級別 8 的級別中稱為 “fill_parent”)則會展開組件以匹配其父視圖的尺寸。

如果使用 “wrap_content” 和 “match_parent” 尺寸值而不是硬編碼的尺寸,視圖就會相應地僅使用自身所需的空間或展開以填滿可用空間。此方法可讓布局正確適應各種屏幕尺寸和屏幕方向。

下面是一段示例代碼

下圖是在橫縱屏切換的時候的顯示效果,我們可以看到這樣可以很好的適配屏幕尺寸的變化。

weight是線性布局的一個獨特的屬性,我們可以使用這個屬性來按照比例對界面進行分配,完成一些特殊的需求。

但是,我們對于這個屬性的計算應該如何理解呢?

首先看下面的例子,我們在布局中這樣設置我們的界面

我們在布局里面設置為線性布局,橫向排列,然后放置兩個寬度為0dp的按鈕,分別設置weight為1和2,在效果圖中,我們可以看到兩個按鈕按照1:2的寬度比例正常排列了,這也是我們經常使用到的場景,這是時候很好理解,Button1的寬度就是1/(1+2) = 1/3,Button2的寬度則是2/(1+2) = 2/3,我們可以很清楚的明白這種情景下的占比如何計算。

但是假如我們的寬度不是0dp(wrap_content和0dp的效果相同),則是match_parent呢?

下面是設置為match_parent的效果

我們可以看到,在這種情況下,占比和上面正好相反,這是怎么回事呢?說到這里,我們就不得不提一下weight的計算方法了。

android:layout_weight的真實含義是:如果View設置了該屬性并且有效,那么該 View的寬度等于原有寬度(android:layout_width)加上剩余空間的占比。

從這個角度我們來解釋一下上面的現象。在上面的代碼中,我們設置每個Button的寬度都是match_parent,假設屏幕寬度為L,那么每個Button的寬度也應該都為L,剩余寬度就等于L-(L+L)= -L。

Button1的weight=1,剩余寬度占比為1/(1+2)= 1/3,所以最終寬度為L+1/3*(-L)=2/3L,Button2的計算類似,最終寬度為L+2/3(-L)=1/3L。

這是在水平方向上的,那么在垂直方向上也是這樣嗎?

下面是測試代碼和效果

如果是垂直方向,那么我們應該改變的是layout_height的屬性,下面是0dp的顯示效果

下面是match_parent的顯示效果,結論和水平是完全一樣的

雖然說我們演示了match_parent的顯示效果,并說明了原因,但是在真正用的時候,我們都是設置某一個屬性為0dp,然后按照權重計算所占百分比。

使用相對布局,禁用絕對布局

在開發中,我們大部分時候使用的都是線性布局、相對布局和幀布局,絕對布局由于適配性極差,所以極少使用。

由于各種布局的特點不一樣,所以不能說哪個布局好用,到底應該使用什么布局只能根據實際需求來確定。我們可以使用 LinearLayout 的嵌套實例并結合 “wrap_content” 和 “match_parent”,以便構建相當復雜的布局。不過,我們無法通過 LinearLayout 精確控制子視圖的特殊關系;系統會將 LinearLayout 中的視圖直接并排列出。

如果我們需要將子視圖排列出各種效果而不是一條直線,通常更合適的解決方法是使用 RelativeLayout,這樣就可以根據各組件之間的特殊關系指定布局了。例如,我們可以將某個子視圖對齊到屏幕左側,同時將另一個視圖對齊到屏幕右側。

下面的代碼以官方Demo為例說明。

在上面的代碼中我們使用了相對布局,并且使用alignXXX等屬性指定了子控件的位置,下面是這種布局方式在應對屏幕變化時的表現

在小尺寸屏幕的顯示

在平板的大尺寸上的顯示效果

雖然控件的大小由于屏幕尺寸的增加而發生了改變,但是我們可以看到,由于使用了相對布局,所以控件之前的位置關系并沒有發生什么變化,這說明我們的適配成功了。

使用限定符

使用尺寸限定符

上面所提到的靈活布局或者是相對布局,可以為我們帶來的優勢就只有這么多了。雖然這些布局可以拉伸組件內外的空間以適應各種屏幕,但它們不一定能為每種屏幕都提供最佳的用戶體驗。因此,我們的應用不僅僅只實施靈活布局,還應該應針對各種屏幕配置提供一些備用布局。

如何做到這一點呢?我們可以通過使用配置限定符,在運行時根據當前的設備配置自動選擇合適的資源了,例如根據各種屏幕尺寸選擇不同的布局。

很多應用會在較大的屏幕上實施“雙面板”模式,即在一個面板上顯示項目列表,而在另一面板上顯示對應內容。平板電腦和電視的屏幕已經大到可以同時容納這兩個面板了,但手機屏幕就需要分別顯示。因此,我們可以使用以下文件以便實施這些布局:

res/layout/main.xml,單面板(默認)布局:

res/layout-large/main.xml,雙面板布局:

請注意第二種布局名稱目錄中的 large 限定符。系統會在屬于較大屏幕(例如 7 英寸或更大的平板電腦)的設備上選擇此布局。系統會在較小的屏幕上選擇其他布局(無限定符)。

使用最小寬度限定符

在版本低于 3.2 的 Android 設備上,開發人員遇到的問題之一是“較大”屏幕的尺寸范圍,該問題會影響戴爾 Streak、早期的 Galaxy Tab 以及大部分 7 英寸平板電腦。即使這些設備的屏幕屬于“較大”的尺寸,但很多應用可能會針對此類別中的各種設備(例如 5 英寸和 7 英寸的設備)顯示不同的布局。這就是 Android 3.2 版在引入其他限定符的同時引入“最小寬度”限定符的原因。

最小寬度限定符可讓您通過指定某個最小寬度(以 dp 為單位)來定位屏幕。例如,標準 7 英寸平板電腦的最小寬度為 600 dp,因此如果您要在此類屏幕上的用戶界面中使用雙面板(但在較小的屏幕上只顯示列表),您可以使用上文中所述的單面板和雙面板這兩種布局,但您應使用 sw600dp 指明雙面板布局僅適用于最小寬度為 600 dp 的屏幕,而不是使用 large 尺寸限定符。

res/layout/main.xml,單面板(默認)布局:

res/layout-sw600dp/main.xml,雙面板布局:

也就是說,對于最小寬度大于等于 600 dp 的設備,系統會選擇 layout-sw600dp/main.xml(雙面板)布局,否則系統就會選擇 layout/main.xml(單面板)布局。

但 Android 版本低于 3.2 的設備不支持此技術,原因是這些設備無法將 sw600dp 識別為尺寸限定符,因此我們仍需使用 large 限定符。這樣一來,就會有一個名稱為 res/layout-large/main.xml 的文件(與 res/layout-sw600dp/main.xml 一樣)。但是沒有太大關系,我們將馬上學習如何避免此類布局文件出現的重復。

使用布局別名

最小寬度限定符僅適用于 Android 3.2 及更高版本。因此,如果我們仍需使用與較低版本兼容的概括尺寸范圍(小、正常、大和特大)。例如,如果要將用戶界面設計成在手機上顯示單面板,但在 7 英寸平板電腦、電視和其他較大的設備上顯示多面板,那么我們就需要提供以下文件:

  • res/layout/main.xml: 單面板布局

  • res/layout-large: 多面板布局

  • res/layout-sw600dp: 多面板布局

后兩個文件是相同的,因為其中一個用于和 Android 3.2 設備匹配,而另一個則是為使用較低版本 Android 的平板電腦和電視準備的。

要避免平板電腦和電視的文件出現重復(以及由此帶來的維護問題),您可以使用別名文件。例如,您可以定義以下布局:

  • res/layout/main.xml,單面板布局

  • res/layout/main_twopanes.xml,雙面板布局

然后添加這兩個文件:

?

res/values-large/layout.xml:

res/values-sw600dp/layout.xml:

后兩個文件的內容相同,但它們并未實際定義布局。它們只是將 main 設置成了 main_twopanes 的別名。由于這些文件包含 large 和 sw600dp 選擇器,因此無論 Android 版本如何,系統都會將這些文件應用到平板電腦和電視上(版本低于 3.2 的平板電腦和電視會匹配 large,版本高于 3.2 的平板電腦和電視則會匹配 sw600dp)。

使用屏幕方向限定符

某些布局會同時支持橫向模式和縱向模式,但我們可以通過調整優化其中大部分布局的效果。在新聞閱讀器示例應用中,每種屏幕尺寸和屏幕方向下的布局行為方式如下所示:

  • 小屏幕,縱向:單面板,帶徽標

  • 小屏幕,橫向:單面板,帶徽標

  • 7 英寸平板電腦,縱向:單面板,帶操作欄

  • 7 英寸平板電腦,橫向:雙面板,寬,帶操作欄

  • 10 英寸平板電腦,縱向:雙面板,窄,帶操作欄

  • 10 英寸平板電腦,橫向:雙面板,寬,帶操作欄

  • 電視,橫向:雙面板,寬,帶操作欄

因此,這些布局中的每一種都定義在了 res/layout/ 目錄下的某個 XML 文件中。為了繼續將每個布局分配給各種屏幕配置,該應用會使用布局別名將兩者相匹配:

res/layout/onepane.xml:(單面板)

res/layout/onepane_with_bar.xml:(單面板帶操作欄)

res/layout/twopanes.xml:(雙面板,寬布局)

res/layout/twopanes_narrow.xml:(雙面板,窄布局)

既然我們已定義了所有可能的布局,那就只需使用配置限定符將正確的布局映射到各種配置即可。

現在只需使用布局別名技術即可做到這一點:

res/values/layouts.xml:

res/values-sw600dp-land/layouts.xml:

res/values-sw600dp-port/layouts.xml:

res/values-large-land/layouts.xml:

res/values-large-port/layouts.xml:

使用自動拉伸位圖

支持各種屏幕尺寸通常意味著您的圖片資源還必須能適應各種尺寸。例如,無論要應用到什么形狀的按鈕上,按鈕背景都必須能適應。

如果在可以更改尺寸的組件上使用了簡單的圖片,您很快就會發現顯示效果多少有些不太理想,因為系統會在運行時平均地拉伸或收縮您的圖片。解決方法為使用自動拉伸位圖,這是一種格式特殊的 PNG 文件,其中會指明可以拉伸以及不可以拉伸的區域。

.9的制作,實際上就是在原圖片上添加1px的邊界,然后按照我們的需求,把對應的位置設置成黑色線,系統就會根據我們的實際需求進行拉伸。

下圖是對.9圖的四邊的含義的解釋,左上邊代表拉伸區域,右下邊代表padding box,就是間隔區域,在下面,我們給出一個例子,方便大家理解。

先看下面兩張圖,我們理解一下這四條線的含義。

上圖和下圖的區別,就在于右下邊的黑線不一樣,具體的效果的區別,看右邊的效果圖。上圖效果圖中深藍色的區域,代表內容區域,我們可以看到是在正中央的,這是因為我們在右下邊的是兩個點,這兩個點距離上下左右四個方向的距離就是padding的距離,所以深藍色內容區域在圖片正中央,我們再看下圖,由于右下邊的黑線是圖片長度,所以就沒有padding,從效果圖上的表現就是深藍色區域和圖片一樣大,因此,我們可以利用右下邊來控制內容與背景圖邊緣的padding。

如果你還不明白,那么我們看下面的效果圖,我們分別以圖一和圖二作為背景圖,下面是效果圖。

我們可以看到,使用wrap_content屬性設置長寬,圖一比圖二的效果大一圈,這是為什么呢?還記得我上面說的padding嗎?

這就是padding的效果提現,怎么證明呢?我們再看下面一張圖,給圖一添加padding=0,這樣背景圖設置的padding效果就沒了,是不是兩個一樣大了?

ok,我想你應該明白右下邊的黑線的含義了,下面我們再看一下左上邊的效果。

下面我們只設置了左上邊線,效果圖如下

上面的線沒有包住圖標,下面的線正好包住了圖標,從右邊的效果圖應該可以看出差別,黑線所在的區域就是拉伸區域,上圖黑線所在的全是純色,所以圖標不變形,下面的拉伸區域包裹了圖標,所以在拉伸的時候就會對圖標進行拉伸,但是這樣就會導致圖標變形。注意到下面紅線區域了嘛?這是系統提示我們的,因為這樣拉伸,不符合要求,所以會提示一下。

支持各種屏幕密度

使用非密度制約像素

由于各種屏幕的像素密度都有所不同,因此相同數量的像素在不同設備上的實際大小也有所差異,這樣使用像素定義布局尺寸就會產生問題。因此,請務必使用 dp 或 sp 單位指定尺寸。dp 是一種非密度制約像素,其尺寸與 160 dpi 像素的實際尺寸相同。sp 也是一種基本單位,但它可根據用戶的偏好文字大小進行調整(即尺度獨立性像素),因此我們應將該測量單位用于定義文字大小。

例如,請使用 dp(而非 px)指定兩個視圖間的間距:

請務必使用 sp 指定文字大小:

除了介紹這些最基礎的知識之外,我們下面再來討論一下另外一個問題。

經過上面的介紹,我們都清楚,為了能夠規避不同像素密度的陷阱,Google推薦使用dp來代替px作為控件長度的度量單位,但是我們來看下面的一個場景。

假如我們以Nexus5作為書寫代碼時查看效果的測試機型,Nexus5的總寬度為360dp,我們現在需要在水平方向上放置兩個按鈕,一個是150dp左對齊,另外一個是200dp右對齊,中間留有10dp間隔,那么在Nexus5上面的顯示效果就是下面這樣

<

但是如果在Nexus S或者是Nexus One運行呢?下面是運行結果

可以看到,兩個按鈕發生了重疊。

我們都已經用了dp了,為什么會出現這種情況呢?

你聽我慢慢道來。

雖然說dp可以去除不同像素密度的問題,使得1dp在不同像素密度上面的顯示效果相同,但是還是由于Android屏幕設備的多樣性,如果使用dp來作為度量單位,并不是所有的屏幕的寬度都是相同的dp長度,比如說,Nexus S和Nexus One屬于hdpi,屏幕寬度是320dp,而Nexus 5屬于xxhdpi,屏幕寬度是360dp,Galaxy Nexus屬于xhdpi,屏幕寬度是384dp,Nexus 6 屬于xxxhdpi,屏幕寬度是410dp。所以說,光Google自己一家的產品就已經有這么多的標準,而且屏幕寬度和像素密度沒有任何關聯關系,即使我們使用dp,在320dp寬度的設備和410dp的設備上,還是會有90dp的差別。當然,我們盡量使用match_parent和wrap_content,盡可能少的用dp來指定控件的具體長寬,再結合上權重,大部分的情況我們都是可以做到適配的。

但是除了這個方法,我們還有沒有其他的更徹底的解決方案呢?

我們換另外一個思路來思考這個問題。

下面的方案來自Android Day Day Up 一群的【blue-深圳】,謝謝他的分享精神。

因為分辨率不一樣,所以不能用px;因為屏幕寬度不一樣,所以要小心的用dp,那么我們可不可以用另外一種方法來統一單位,不管分辨率是多大,屏幕寬度用一個固定的值的單位來統計呢?

答案是:當然可以。

我們假設手機屏幕的寬度都是320某單位,那么我們將一個屏幕寬度的總像素數平均分成320份,每一份對應具體的像素就可以了。

具體如何來實現呢?我們看下面的代碼:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 import?java.io.File; import?java.io.FileNotFoundException; import?java.io.FileOutputStream; import?java.io.PrintWriter; public?class?MakeXml?{ ????private?final?static?String?rootPath?=?"C:\\Users\\Administrator\\Desktop\\layoutroot\\values-{0}x{1}\\"; ????private?final?static?float?dw?=?320f; ????private?final?static?float?dh?=?480f; ????private?final?static?String?WTemplate?=?"[dimen?name=\"x{0}\"]{1}px[/dimen]\n"; ????private?final?static?String?HTemplate?=?"[dimen?name=\"y{0}\"]{1}px[/dimen]\n"; ????public?static?void?main(String[]?args)?{ ????????makeString(320,?480); ????????makeString(480,800); ????????makeString(480,?854); ????????makeString(540,?960); ????????makeString(600,?1024); ????????makeString(720,?1184); ????????makeString(720,?1196); ????????makeString(720,?1280); ????????makeString(768,?1024); ????????makeString(800,?1280); ????????makeString(1080,?1812); ????????makeString(1080,?1920); ????????makeString(1440,?2560); ????} ????public?static?void?makeString(int?w,?int?h)?{ ????????StringBuffer?sb?=?new?StringBuffer(); ????????sb.append("[?xml?version=\"1.0\"?encoding=\"utf-8\"?]\n"); ????????sb.append("[resources]"); ????????float?cellw?=?w?/?dw; ????????for?(int?i?=?1;?i?<?320;?i++)?{ ????????????sb.append(WTemplate.replace("{0}",?i?+?"").replace("{1}", ????????????????????change(cellw?*?i)?+?"")); ????????} ????????sb.append(WTemplate.replace("{0}",?"320").replace("{1}",?w?+?"")); ????????sb.append("[/resources]"); ????????StringBuffer?sb2?=?new?StringBuffer(); ????????sb2.append("[?xml?version=\"1.0\"?encoding=\"utf-8\"?]\n"); ????????sb2.append("[resources]"); ????????float?cellh?=?h?/?dh; ????????for?(int?i?=?1;?i?<?480;?i++)?{ ????????????sb2.append(HTemplate.replace("{0}",?i?+?"").replace("{1}", ????????????????????change(cellh?*?i)?+?"")); ????????} ????????sb2.append(HTemplate.replace("{0}",?"480").replace("{1}",?h?+?"")); ????????sb2.append("[/resources]"); ????????String?path?=?rootPath.replace("{0}",?h?+?"").replace("{1}",?w?+?""); ????????File?rootFile?=?new?File(path); ????????if?(!rootFile.exists())?{ ????????????rootFile.mkdirs(); ????????} ????????File?layxFile?=?new?File(path?+?"lay_x.xml"); ????????File?layyFile?=?new?File(path?+?"lay_y.xml"); ????????try?{ ????????????PrintWriter?pw?=?new?PrintWriter(new?FileOutputStream(layxFile)); ????????????pw.print(sb.toString()); ????????????pw.close(); ????????????pw?=?new?PrintWriter(new?FileOutputStream(layyFile)); ????????????pw.print(sb2.toString()); ????????????pw.close(); ????????}?catch?(FileNotFoundException?e)?{ ????????????e.printStackTrace(); ????????} ????} ????public?static?float?change(float?a)?{ ????????int?temp?=?(int)?(a?*?100); ????????return?temp?/?100f; ????} }

代碼應該很好懂,我們將一個屏幕寬度分為320份,高度480份,然后按照實際像素對每一個單位進行復制,放在對應values-widthxheight文件夾下面的lax.xml和lay.xml里面,這樣就可以統一所有你想要的分辨率的單位了,下面是生成的一個320*480分辨率的文件,因為寬高分割之后總分數和像素數相同,所以x1就是1px,以此類推。

那么1080*1960分辨率下是什么樣子呢?我們可以看下,由于1080和320是3.37倍的關系,所以x1=3.37px

無論在什么分辨率下,x320都是代表屏幕寬度,y480都是代表屏幕高度。

那么,我們應該如何使用呢?

首先,我們要把生成的所有values文件夾放到res目錄下,當設計師把UI高清設計圖給你之后,你就可以根據設計圖上的尺寸,以某一個分辨率的機型為基礎,找到對應像素數的單位,然后設置給控件即可。

下圖還是兩個Button,不同的是,我們把單位換成了我們在values文件夾下dimen的值,這樣在你指定的分辨率下,不管寬度是320dp、360dp,還是410dp,就都可以完全適配了。

但是,還是有個問題,為什么下面的三個沒有適配呢?

這是因為由于在生成的values文件夾里,沒有對應的分辨率,其實一開始是報錯的,因為默認的values沒有對應dimen,所以我只能在默認values里面也創建對應文件,但是里面的數據卻不好處理,因為不知道分辨率,我只好默認為x1=1dp保證盡量兼容。這也是這個解決方案的幾個弊端,對于沒有生成對應分辨率文件的手機,會使用默認values文件夾,如果默認文件夾沒有,就會出現問題。

所以說,這個方案雖然是一勞永逸,但是由于實際上還是使用的px作為長度的度量單位,所以多少和google的要求有所背離,不好說以后會不會出現什么不可預測的問題。其次,如果要使用這個方案,你必須盡可能多的包含所有的分辨率,因為這個是使用這個方案的基礎,如果有分辨率缺少,會造成顯示效果很差,甚至出錯的風險,而這又勢必會增加軟件包的大小和維護的難度,所以大家自己斟酌,擇優使用。

更多信息可參考鴻洋的新文章:Android 屏幕適配方案。

提供備用位圖

由于 Android 可在具有各種屏幕密度的設備上運行,因此我們提供的位圖資源應始終可以滿足各類普遍密度范圍的要求:低密度、中等密度、高密度以及超高密度。這將有助于我們的圖片在所有屏幕密度上都能得到出色的質量和效果。

要生成這些圖片,我們應先提取矢量格式的原始資源,然后根據以下尺寸范圍針對各密度生成相應的圖片。

  • xhdpi:2.0

  • hdpi:1.5

  • mdpi:1.0(最低要求)

  • ldpi:0.75

也就是說,如果我們為 xhdpi 設備生成了 200x200 px尺寸的圖片,就應該使用同一資源為 hdpi、mdpi 和 ldpi 設備分別生成 150x150、100x100 和 75x75 尺寸的圖片。

然后,將生成的圖片文件放在 res/ 下的相應子目錄中(mdpi、hdpi、xhdpi、xxhdpi),系統就會根據運行您應用的設備的屏幕密度自動選擇合適的圖片。

這樣一來,只要我們引用 @drawable/id,系統都能根據相應屏幕的 dpi 選取合適的位圖。

還記得我們上面提到的圖標設計尺寸嗎?和這個其實是一個意思。

但是還有個問題需要注意下,如果是.9圖或者是不需要多個分辨率的圖片,就放在drawable文件夾即可,對應分辨率的圖片要正確的放在合適的文件夾,否則會造成圖片拉伸等問題。

實施自適應用戶界面流程

前面我們介紹過,如何根據設備特點顯示恰當的布局,但是這樣做,會使得用戶界面流程可能會有所不同。例如,如果應用處于雙面板模式下,點擊左側面板上的項即可直接在右側面板上顯示相關內容;而如果該應用處于單面板模式下,點擊相關的內容應該跳轉到另外一個Activity進行后續的處理。所以我們應該按照下面的流程,一步步的完成自適應界面的實現。

確定當前布局

由于每種布局的實施都會稍有不同,因此我們需要先確定當前向用戶顯示的布局。例如,我們可以先了解用戶所處的是“單面板”模式還是“雙面板”模式。要做到這一點,可以通過查詢指定視圖是否存在以及是否已顯示出來。

1 2 3 4 5 6 7 8 9 10 11 12 13 ublic?class?NewsReaderActivity?extends?FragmentActivity?{ ????boolean?mIsDualPane; ????@Override ????public?void?onCreate(Bundle?savedInstanceState)?{ ????????super.onCreate(savedInstanceState); ????????setContentView(R.layout.main_layout); ????????View?articleView?=?findViewById(R.id.article); ????????mIsDualPane?=?articleView?!=?null?&& ????????????????????????articleView.getVisibility()?==?View.VISIBLE; ????} }

請注意,這段代碼用于查詢“報道”面板是否可用,與針對具體布局的硬編碼查詢相比,這段代碼的靈活性要大得多。

再舉一個適應各種組件的存在情況的方法示例:在對這些組件執行操作前先查看它們是否可用。例如,新聞閱讀器示例應用中有一個用于打開菜單的按鈕,但只有在版本低于 3.0 的 Android 上運行該應用時,這個按鈕才會存在,因為 API 級別 11 或更高級別中的 ActionBar 已取代了該按鈕的功能。因此,您可以使用以下代碼為此按鈕添加事件偵聽器:

1 2 3 4 5 Button?catButton?=?(Button)?findViewById(R.id.categorybutton); OnClickListener?listener?=?/*?create?your?listener?here?*/; if?(catButton?!=?null)?{ ????catButton.setOnClickListener(listener); }

根據當前布局做出響應

有些操作可能會因當前的具體布局而產生不同的結果。例如,在新聞閱讀器示例中,如果用戶界面處于雙面板模式下,那么點擊標題列表中的標題就會在右側面板中打開相應報道;但如果用戶界面處于單面板模式下,那么上述操作就會啟動一個獨立活動:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Override public?void?onHeadlineSelected(int?index)?{ ????mArtIndex?=?index; ????if?(mIsDualPane)?{ ????????/*?display?article?on?the?right?pane?*/ ????????mArticleFragment.displayArticle(mCurrentCat.getArticle(index)); ????}?else?{ ????????/*?start?a?separate?activity?*/ ????????Intent?intent?=?new?Intent(this,?ArticleActivity.class); ????????intent.putExtra("catIndex",?mCatIndex); ????????intent.putExtra("artIndex",?index); ????????startActivity(intent); ????} }

同樣,如果該應用處于雙面板模式下,就應設置帶導航標簽的操作欄;但如果該應用處于單面板模式下,就應使用下拉菜單設置導航欄。因此我們的代碼還應確定哪種情況比較合適:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 final?String?CATEGORIES[]?=?{?"熱門報道",?"政治",?"經濟",?"Technology"?}; public?void?onCreate(Bundle?savedInstanceState)?{ ????.... ????if?(mIsDualPane)?{ ????????/*?use?tabs?for?navigation?*/ ????????actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_TABS); ????????int?i; ????????for?(i?=?0;?i?<?CATEGORIES.length;?i++)?{ ????????????actionBar.addTab(actionBar.newTab().setText( ????????????????CATEGORIES[i]).setTabListener(handler)); ????????} ????????actionBar.setSelectedNavigationItem(selTab); ????} ????else?{ ????????/*?use?list?navigation?(spinner)?*/ ????????actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST); ????????SpinnerAdapter?adap?=?new?ArrayAdapter(this, ????????????????R.layout.headline_item,?CATEGORIES); ????????actionBar.setListNavigationCallbacks(adap,?handler); ????} }

重復使用其他活動中的片段

多屏幕設計中的重復模式是指,對于某些屏幕配置,已實施界面的一部分會用作面板;但對于其他配置,這部分就會以獨立活動的形式存在。例如,在新聞閱讀器示例中,對于較大的屏幕,新聞報道文本會顯示在右側面板中;但對于較小的屏幕,這些文本就會以獨立活動的形式存在。

在類似情況下,通常可以在多個活動中重復使用相同的 Fragment 子類以避免代碼重復。例如,在雙面板布局中使用了 ArticleFragment:

然后又在小屏幕的Activity布局中重復使用了它 :

1 2 ArticleFragment?frag?=?new?ArticleFragment(); getSupportFragmentManager().beginTransaction().add(android.R.id.content,?frag).commit();

當然,這與在 XML 布局中聲明片段的效果是一樣的,但在這種情況下卻沒必要使用 XML 布局,因為報道片段是此活動中的唯一組件。

請務必在設計片段時注意,不要針對具體活動創建強耦合。要做到這一點,通常可以定義一個接口,該接口概括了相關片段與其主活動交互所需的全部方式,然后讓主活動實施該界面:

例如,新聞閱讀器應用的 HeadlinesFragment 會精確執行以下代碼:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 public?class?HeadlinesFragment?extends?ListFragment?{ ????... ????OnHeadlineSelectedListener?mHeadlineSelectedListener?=?null; ????/*?Must?be?implemented?by?host?activity?*/ ????public?interface?OnHeadlineSelectedListener?{ ????????public?void?onHeadlineSelected(int?index); ????} ????... ????public?void?setOnHeadlineSelectedListener(OnHeadlineSelectedListener?listener)?{ ????????mHeadlineSelectedListener?=?listener; ????} }

然后,如果用戶選擇某個標題,相關片段就會通知由主活動指定的偵聽器(而不是通知某個硬編碼的具體活動):

1 2 3 4 5 6 7 8 9 10 11 public?class?HeadlinesFragment?extends?ListFragment?{ ????... ????@Override ????public?void?onItemClick(AdapterView?parent, ????????????????????????????View?view,?int?position,?long?id)?{ ????????if?(null?!=?mHeadlineSelectedListener)?{ ????????????mHeadlineSelectedListener.onHeadlineSelected(position); ????????} ????} ????... }

除此之外,我們還可以使用第三方框架,比如說使用“訂閱-發布”模式的EventBus來更多的優化組件之間的通信,減少耦合。

處理屏幕配置變化

如果我們使用獨立Activity實施界面的獨立部分,那么請注意,我們可能需要對特定配置變化(例如屏幕方向的變化)做出響應,以便保持界面的一致性。

例如,在運行 Android 3.0 或更高版本的標準 7 英寸平板電腦上,如果新聞閱讀器示例應用運行在縱向模式下,就會在使用獨立活動顯示新聞報道;但如果該應用運行在橫向模式下,就會使用雙面板布局。

也就是說,如果用戶處于縱向模式下且屏幕上顯示的是用于閱讀報道的活動,那么就需要在檢測到屏幕方向變化(變成橫向模式)后執行相應操作,即停止上述活動并返回主活動,以便在雙面板布局中顯示相關內容:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public?class?ArticleActivity?extends?FragmentActivity?{ ????int?mCatIndex,?mArtIndex; ????@Override ????protected?void?onCreate(Bundle?savedInstanceState)?{ ????????super.onCreate(savedInstanceState); ????????mCatIndex?=?getIntent().getExtras().getInt("catIndex",?0); ????????mArtIndex?=?getIntent().getExtras().getInt("artIndex",?0); ????????//?If?should?be?in?two-pane?mode,?finish?to?return?to?main?activity ????????if?(getResources().getBoolean(R.bool.has_two_panes))?{ ????????????finish(); ????????????return; ????????} ????????... }

通過上面幾個步驟,我們就完全可以建立一個可以根據用戶界面配置進行自適應的App了。

最佳實踐

關于高清設計圖尺寸

Google官方給出的高清設計圖尺寸有兩種方案,一種是以mdpi設計,然后對應放大得到更高分辨率的圖片,另外一種則是以高分辨率作為設計大小,然后按照倍數對應縮小到小分辨率的圖片。

根據經驗,我更推薦第二種方法,因為小分辨率在生成高分辨率圖片的時候,會出現像素丟失,我不知道是不是有方法可以阻止這種情況發生。

而分辨率可以以1280*720或者是1960*1080作為主要分辨率進行設計。

ImageView的ScaleType屬性

設置不同的ScaleType會得到不同的顯示效果,一般情況下,設置為centerCrop能獲得較好的適配效果。

動態設置

有一些情況下,我們需要動態的設置控件大小或者是位置,比如說popwindow的顯示位置和偏移量等,這個時候我們可以動態的獲取當前的屏幕屬性,然后設置合適的數值

1 2 3 4 5 6 7 8 9 10 11 public?class?ScreenSizeUtil?{ ????public?static?int?getScreenWidth(Activity?activity)?{ ????????return?activity.getWindowManager().getDefaultDisplay().getWidth(); ????} ????public?static?int?getScreenHeight(Activity?activity)?{ ????????return?activity.getWindowManager().getDefaultDisplay().getHeight(); ????} }

轉自:鏈接

轉載于:https://www.cnblogs.com/YangBinChina/p/4925117.html

總結

以上是生活随笔為你收集整理的Android屏幕适配全攻略(最权威的官方适配指导) (转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

91精品在线麻豆 | 在线观看成人一级片 | 国产999免费视频 | 在线有码中文 | 午夜精品久久久久 | 久久草精品 | 久青草影院| 91成人短视频在线观看 | 精品国产成人av | 国产精品video | 亚洲资源在线网 | 欧美日韩高清免费 | 久久96国产精品久久99漫画 | 久久久久久久久久久久电影 | 91精品国产综合久久久久久久 | 亚洲精品免费在线视频 | 中文字幕丰满人伦在线 | 日韩一区精品 | 国产999久久久 | 亚洲精品综合在线 | 欧洲激情在线 | 日本黄色免费大片 | 最新超碰在线 | 亚洲va男人天堂 | 久久精品www人人爽人人 | 国产精品成人a免费观看 | 日韩精品一区二区三区在线播放 | www免费网站在线观看 | 高清av免费一区中文字幕 | 黄色成人在线观看 | 狠狠色狠狠色合久久伊人 | 91欧美在线 | 婷婷色网站 | 精品一区二区6 | 青青河边草手机免费 | 久久久免费视频播放 | 一区二区三区在线观看 | 国产成a人亚洲精v品在线观看 | 午夜视频免费 | 成人久久精品 | 三级视频国产 | 久久久久国产成人免费精品免费 | 午夜精品一区二区三区可下载 | 国产免费亚洲 | 日韩精品一区二区免费视频 | 午夜精品成人一区二区三区 | 中文字幕精品一区二区三区电影 | 毛片一区二区 | 成人资源在线播放 | av噜噜噜在线播放 | 国产乱码精品一区二区蜜臀 | 国产一级片播放 | 精品高清美女精品国产区 | 成人免费在线观看av | 国产精品免费av | 天天色天天综合 | 999抗病毒口服液 | 韩国av电影在线观看 | 激情婷婷久久 | 国产小视频在线观看 | 97视频网址| 亚洲91中文字幕无线码三区 | 久久激情视频免费观看 | 成人影片免费 | 欧美日韩在线第一页 | 在线电影日韩 | av天天色| 日韩一区二区三区高清在线观看 | 成人在线免费看视频 | 天天爱天天射天天干天天 | 成人午夜在线电影 | 久久成人18免费网站 | 激情视频国产 | 久久九九九九 | 久草视频在线播放 | 超碰97人人干 | 欧美激情第一页xxx 午夜性福利 | 久草视频在线观 | 99精品视频网 | 一级免费av | 五月婷婷综合在线观看 | 在线不卡a | 国产在线精品视频 | 久久中文字幕视频 | 久久精品国产免费看久久精品 | 国产在线精品一区二区 | 在线国产91 | 久久精品5 | 啪啪av在线| 欧美日韩一区三区 | 亚洲精品国产第一综合99久久 | 欧美日韩免费在线观看视频 | 免费a网址 | 日韩午夜视频在线观看 | 麻豆精品视频在线观看免费 | 久久久91精品国产 | 中文字幕 国产精品 | 嫩草伊人久久精品少妇av | 精品久久一| av中文字幕网站 | 久久国产精品久久w女人spa | 黄色国产高清 | 99视| 成人免费网站视频 | 欧美国产日韩在线观看 | 欧洲av在线 | 久久99国产综合精品免费 | 国产精品美女久久久久久久 | 久久香蕉电影 | 婷婷九月激情 | 久久亚洲专区 | 久久视了 | 人人爽人人乐 | 亚洲精品黄色在线观看 | 视频在线99 | 日本最新高清不卡中文字幕 | 91天天操| 一级黄色片网站 | 人人爽人人爽人人爽学生一级 | 亚洲国产一二三 | 91看片淫黄大片一级在线观看 | 麻豆视频一区 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 国产精品久一 | 久久免费视频网 | 欧美日韩国产一二 | 久久国产综合视频 | 成人免费观看在线视频 | 黄色大片免费播放 | 久久久综合电影 | 99免费在线观看视频 | 久久久高清免费视频 | 国产伦理久久精品久久久久_ | 欧美一级裸体视频 | 亚洲精品中文在线 | 国内精品福利视频 | 午夜少妇 | 521色香蕉网站在线观看 | 天天摸天天舔天天操 | 天天操天天干天天玩 | 操操操操网 | 国产一区二区在线影院 | 亚洲日本色 | 国色综合 | 在线视频观看成人 | 午夜丁香视频在线观看 | 精品在线观看一区二区 | 日韩精品一区二区三区第95 | 国产精品免费久久久 | 欧美一二区视频 | 欧美激情xxxx | 亚洲一区二区精品视频 | 国产精品福利在线观看 | 国产精品成人国产乱 | 中文字幕二区在线观看 | 69xx视频| 日韩剧情| 免费视频一级片 | 久久天天躁狠狠躁夜夜不卡公司 | 国产精品久久久久久久久免费看 | 最新中文字幕在线播放 | 韩日精品在线 | 欧美激情精品久久久 | 91九色蝌蚪国产 | 91片黄在线观 | 中文电影网 | 久久国产精品免费观看 | 色国产在线 | 免费观看www7722午夜电影 | 亚洲一区二区三区毛片 | 亚洲成免费 | 久久久黄视频 | 精品视频免费看 | 黄色av三级在线 | 综合网婷婷 | 国产日韩三级 | 在线视频观看国产 | 精品久久91 | 国产黄色在线看 | 中文字幕影片免费在线观看 | 中文字幕日本在线观看 | 欧美一区二区在线刺激视频 | 欧美日韩在线观看不卡 | 久久精品国产成人 | 在线观看国产区 | 色综合久久久久综合99 | 久久9999久久免费精品国产 | www.玖玖玖 | 亚洲精品视频在线观看视频 | 久草热久草视频 | 久久久久久久久久国产精品 | 91影视成人 | 成人午夜片av在线看 | 国产91在线 | 美洲 | 亚洲天堂自拍视频 | 日本一区二区三区视频在线播放 | 久久亚洲精品电影 | 永久免费看av | 国产丝袜在线 | 91九色综合 | 中文字幕在线国产精品 | www..com毛片 | 涩涩成人在线 | 日韩网站在线 | 国产精品麻豆果冻传媒在线播放 | 久久99精品一区二区三区三区 | 日韩免费看片 | 国产青春久久久国产毛片 | 免费视频 三区 | 66av99精品福利视频在线 | 黄污视频网站大全 | www.色com| 一区二区视频欧美 | 中文国产在线观看 | 日韩精品高清不卡 | 国产精品久久99精品毛片三a | 成人一区影院 | 欧美性粗大hdvideo | 美女网站视频免费黄 | 在线视频中文字幕一区 | 亚洲三级影院 | 久久这里只有精品久久 | 中文字幕 国产专区 | 天天干天天射天天爽 | 亚洲国产精品免费 | 久久久久电影网站 | 偷拍区另类综合在线 | 91免费网| 亚洲国产精品一区二区久久,亚洲午夜 | 日韩av网站在线播放 | 超碰在线97观看 | 国产在线不卡 | 精品在线二区 | 日韩视频免费观看高清 | 六月色播 | 中文字幕中文字幕中文字幕 | 狠狠gao | 亚洲爽爽网 | 欧美日韩在线观看一区二区三区 | 国产精品成人自拍 | 日韩欧美在线第一页 | 久久精品久久精品久久精品 | 黄色片网站 | 免费在线观看黄 | 久久视频这里只有精品 | 成人影视片 | 久久精品aaa | 欧美久草在线 | av在线免费在线观看 | 国产黄色片在线 | 午夜精品久久久久久久99水蜜桃 | 亚洲国产69 | 久久a v视频 | 日韩黄色大片在线观看 | 精品免费观看 | 亚洲精品小区久久久久久 | 美女福利视频一区二区 | 日韩三级成人 | 首页中文字幕 | 欧美嫩草影院 | 久久综合九色综合欧美狠狠 | 天堂视频一区 | 免费网站黄| 国产成人一区二区三区 | 天天弄天天干 | 中文字幕在线观看一区二区三区 | 日韩精品一区二区在线观看视频 | 人人爱人人舔 | 午夜黄色一级片 | 五月天免费网站 | 1000部国产精品成人观看 | 国产中年夫妇高潮精品视频 | 精品视频专区 | 激情六月婷婷久久 | 国产精品成人一区二区三区吃奶 | 日韩在线首页 | 国产在线观看h | 视频国产在线观看18 | 深夜免费小视频 | 国产一级黄色片免费看 | 91精品视频在线观看免费 | 欧美精品999 | 日韩av中文字幕在线免费观看 | 精品国产一二三 | 久久人人97超碰精品888 | av福利免费 | 97国产精品久久 | 黄色影院在线免费观看 | 久久99国产精品自在自在app | 国产精品日韩欧美 | 国产欧美在线一区二区三区 | 天堂成人在线 | 国产高清精品在线 | 黄污网| av黄色影院| 国产 日韩 在线 亚洲 字幕 中文 | 91福利视频久久久久 | 成人国产电影在线观看 | 免费av一级电影 | 日韩视频免费看 | av看片在线观看 | 欧洲精品在线视频 | 欧美一区三区四区 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 欧洲色吧| 久久在线免费观看视频 | 日韩视频中文字幕 | 在线观看国产91 | 91传媒在线看 | 欧美性生活免费 | 91麻豆国产福利在线观看 | 日韩在线播放欧美字幕 | 亚洲女人av | 日韩欧美在线一区 | free,性欧美| 精品日韩视频 | 国产精品国产三级国产不产一地 | 久久久福利视频 | 91av手机在线| 国产精品久久久久久久久久久免费看 | 欧美国产日韩一区二区三区 | 精品国产自在精品国产精野外直播 | 欧美日韩视频免费 | 成人黄色av免费在线观看 | 日韩a欧美 | 91精品国产成人 | 91色在线观看视频 | 99免费在线播放99久久免费 | 久久婷婷亚洲 | 天堂在线一区二区 | 欧美日本三级 | 99精品视频免费观看视频 | 国产成人精品999在线观看 | 免费视频久久久久 | www.夜夜夜| 少妇18xxxx性xxxx片 | 99精品乱码国产在线观看 | 日韩小视频网站 | 日韩欧美精品在线观看视频 | 久久免费精品一区二区三区 | 国产黄色一级大片 | 五月天丁香 | 99精品国产免费久久久久久下载 | 久久国产精品区 | 日日夜夜精品网站 | 成人黄色片免费 | 久久精品欧美一 | 免费看的黄色的网站 | 免费a网 | 国产乱老熟视频网88av | 在线播放第一页 | 97精品一区二区三区 | 亚洲精品国偷自产在线91正片 | 成人黄色电影免费观看 | 特级西西人体444是什么意思 | 欧美精品乱码久久久久久 | 免费网站污 | 久久久久久亚洲精品 | 69av视频在线观看 | 天天艹天天干天天 | 欧美日韩国产网站 | 99精品偷拍视频一区二区三区 | 亚洲黄色在线 | 婷婷五天天在线视频 | 人人草在线视频 | 最近能播放的中文字幕 | 久久96国产精品久久99漫画 | 黄www在线观看 | 六月色| 久久五月天婷婷 | 亚洲成av人片在线观看无 | 亚洲天天在线日亚洲洲精 | 亚洲狠狠婷婷 | 日韩午夜在线 | 天天看天天干天天操 | 成人黄色电影在线观看 | 国产精品美女久久 | 最新色视频 | 久久精品伊人 | 2021国产视频 | 国产九色视频在线观看 | 精品视频久久 | 人人干网 | 午夜精品一区二区三区在线 | 欧美肥妇free| 免费色视频网站 | 99久久99视频只有精品 | 国产高清不卡一区二区三区 | 草久草久 | 国产黄色精品网站 | 日本在线观看中文字幕 | 91麻豆精品91久久久久同性 | 免费瑟瑟网站 | 国产一区二区在线播放视频 | 人人干人人搞 | 国产高清一区二区 | 色综合天天狠天天透天天伊人 | 99视频在线免费播放 | 黄色软件大全网站 | 黄色网免费 | www.黄色在线| 亚洲精品av中文字幕在线在线 | 欧美极度另类性三渗透 | 亚洲一二区精品 | 午夜在线国产 | 丁香婷婷综合五月 | 九九九在线观看 | 色网站视频 | 中文字幕 二区 | 夜夜躁狠狠躁 | 亚洲精品视频在线免费 | 午夜久久久精品 | 国产亲近乱来精品 | 中文字幕中文字幕在线中文字幕三区 | 最近中文字幕大全中文字幕免费 | 欧美日韩国产一区二 | a久久久久| 五月综合激情婷婷 | 91精品天码美女少妇 | 一区二区三区免费网站 | 一二三四精品 | 91成品人影院 | 成人在线免费视频观看 | 中文在线天堂资源 | 国产日韩精品一区二区三区在线 | 97av视频| 亚洲天天综合网 | 久久夜色网 | 二区三区毛片 | 亚州日韩中文字幕 | 一区二区不卡在线观看 | www黄| 成人四虎| 久久人人爽人人人人片 | 999国产在线 | www天天干| 成人黄色免费观看 | 天天做天天爱天天爽综合网 | 人人澡人摸人人添学生av | 国产精品一区一区三区 | a久久久久| 午夜精品久久久久久中宇69 | 午夜视频在线观看一区二区 | 免费高清无人区完整版 | 亚洲三级黄 | 美女免费视频一区二区 | 久久精品久久精品久久 | 久久国产色 | 九九热精品在线 | 久久综合九色综合欧美就去吻 | 国内精品久久久久久久久 | 日韩亚洲在线 | 91福利区一区二区三区 | 国产一区二区视频在线 | 国产精品av电影 | 99色精品视频 | 免费久久久久久 | 成人黄色在线播放 | 久久理论影院 | 欧美最新大片在线看 | av综合av | 最近中文国产在线视频 | 天天插日日插 | 天天插天天色 | 91理论片午午伦夜理片久久 | 日韩免费高清在线 | 免费在线a | 九九热1| 狠狠干夜夜操天天爽 | 五月婷婷六月丁香在线观看 | 最新精品国产 | 国产精品密入口果冻 | 免费色视频在线 | 国产韩国精品一区二区三区 | 色综合a| 国产不卡高清 | 亚洲国产欧美一区二区三区丁香婷 | 91av在线不卡| 国模视频一区二区三区 | 久草在线免费在线观看 | 99久久久久成人国产免费 | 日韩免费电影一区二区三区 | 日韩精品一区二区三区视频播放 | 天天操天天射天天爱 | 97影视 | 最新国产精品拍自在线播放 | 99爱在线观看 | 日韩国产欧美在线视频 | 国产精华国产精品 | 亚洲国产精品500在线观看 | 波多野结衣亚洲一区二区 | 国产黄色特级片 | 国产在线视频资源 | 国产视频久久久久 | 久操视频在线免费看 | 亚州精品在线视频 | 一区二区视频免费在线观看 | 亚洲国产小视频在线观看 | 免费无遮挡动漫网站 | 日本性xxxxx 亚洲精品午夜久久久 | 狠狠躁夜夜躁人人爽超碰91 | 亚洲精品456在线播放第一页 | 国产一区二区三区四区在线 | 香蕉影院在线观看 | 成人欧美一区二区三区在线观看 | 操操操天天操 | 在线最新av | www最近高清中文国语在线观看 | 久久精品久久久久久久 | 97精产国品一二三产区在线 | 国产精品9区 | 日韩中字在线 | 天天看天天干 | 久久久这里有精品 | 国内偷拍精品视频 | 中文字幕亚洲综合久久五月天色无吗'' | 天天躁日日躁狠狠躁 | 天天草综合网 | 91久久久久久久一区二区 | 中文字幕在线成人 | 亚洲一级电影 | 亚洲精品日韩在线观看 | 天天操天天操天天操天天操 | 亚洲午夜精品久久久 | 色中色亚洲 | 久草9视频 | 在线免费91 | 西西人体4444www高清视频 | 日日干天天爽 | 日韩精品国产一区 | 日本在线观看黄色 | 一本一道久久a久久综合蜜桃 | 亚洲乱码在线观看 | 日韩在线视频不卡 | 欧美精品一二 | 日韩中文字幕免费电影 | 五月婷婷,六月丁香 | 天天人人综合 | 中文字幕欧美激情 | 日韩免费视频播放 | 婷婷丁香七月 | 九九免费在线观看 | 91人人澡人人爽人人精品 | 天堂黄色片| 国产99久久精品一区二区300 | 国产黄网在线 | 日韩理论在线视频 | 色哟哟国产精品 | 天天综合网在线 | 伊香蕉大综综综合久久啪 | 中文字幕免费久久 | 九色在线 | 麻豆94tv免费版 | 操天天操| 国产精品黄网站在线观看 | 天天色成人| av大全在线 | 99久久99久久精品 | 久久精品成人 | 久久激情五月丁香伊人 | 亚洲电影影音先锋 | 特黄特黄的视频 | 国产精品2020 | 香蕉一区 | 黄色成人在线 | 国产精品日韩高清 | 福利视频午夜 | 久久成人18免费网站 | 久久久久亚洲精品男人的天堂 | 色综合色综合久久综合频道88 | 免费观看av网站 | 日韩精品一区二区三区在线播放 | 精品久久国产 | 丁香视频五月 | 久久伦理电影 | 国产一级性生活 | 欧美va天堂va视频va在线 | 亚洲闷骚少妇在线观看网站 | 97视频免费在线看 | 在线免费黄色片 | 欧美久久久久 | 天天综合网国产 | 欧美国产高清 | 五月激情片 | 午夜在线资源 | 日韩经典一区二区三区 | 国产色综合天天综合网 | 玖玖在线视频观看 | 午夜精品视频一区 | 精品久久久精品 | 成人免费视频a | 欧美二区三区91 | 五月婷婷天堂 | 亚洲精品一区中文字幕乱码 | 正在播放亚洲精品 | 国产在线免费观看 | 91丨九色丨高潮 | 黄色美女免费网站 | 欧美日韩在线播放 | 成 人 黄 色 片 在线播放 | 激情在线网站 | av看片在线| 国产精品久久久久久欧美 | 久久伊人八月婷婷综合激情 | 久久精品中文视频 | 四虎永久视频 | 中文字幕在线视频网站 | 黄色片软件网站 | 亚洲一区二区三区91 | 国产成人精品午夜在线播放 | 国产成人精品久 | 狠狠的操你| 天天干天天操av | 国产亚洲精品久久久久5区 成人h电影在线观看 | 91精品91 | 午夜视频在线观看一区二区三区 | 欧美日韩二区在线 | 奇米影视在线99精品 | 天天操狠狠操网站 | 久久精品一区二区国产 | 国产亚洲精品综合一区91 | 一二三久久久 | www.五月天婷婷.com | 国产h在线观看 | 国产手机在线视频 | 欧美激情综合五月色丁香 | 在线观看视频日韩 | 免费视频黄色 | 日韩精品在线观看av | 天天操天天干天天玩 | 国产中文字幕视频在线 | 久久久国产一区二区 | 波多野结衣精品在线 | 日韩在线观看高清 | 亚洲亚洲精品在线观看 | 中文在线a在线 | 免费黄色在线播放 | 日韩伦理片hd| 国产精品视频免费看 | 久久伊人爱 | 中文字幕91 | a v在线视频| 国产成人三级一区二区在线观看一 | 久久综合婷婷综合 | 欧美一进一出抽搐大尺度视频 | 99夜色| 国内免费久久久久久久久久久 | 日日操天天操夜夜操 | 国产精品国产三级国产专区53 | 天天色播| 夜夜夜影院 | 日韩 精品 一区 国产 麻豆 | 国产九九九视频 | 久久久久久国产精品 | av免费福利 | 97在线视频网站 | 91男人影院 | 日韩激情影院 | 国产亚洲综合在线 | 99爱爱| 久久艹在线观看 | 久久精品超碰 | 国产又粗又猛又爽又黄的视频免费 | 天天射射天天 | 少妇精品久久久一区二区免费 | 日韩精品一区二区三区外面 | 在线视频你懂 | 亚洲国产成人久久 | 久久人人爽人人爽人人 | 超级碰碰免费视频 | 成人在线播放视频 | 三级av在线 | 美女网站黄在线观看 | 久久亚洲福利视频 | 91人人爽人人爽人人精88v | 激情大尺度视频 | av色网站 | 天天射天 | 月下香电影 | 成人国产电影在线观看 | 日韩精品一区二区三区免费视频观看 | av网站在线观看免费 | 天天摸天天操天天舔 | 国产精品色婷婷视频 | 国产自在线观看 | 久久免费的视频 | 免费99视频 | www.婷婷色| 欧美日韩另类在线 | www.天天干 | 亚洲欧美精品一区二区 | 亚洲免费观看视频 | av中文在线观看 | 国产精品久久麻豆 | 成人在线免费视频观看 | 18国产精品白浆在线观看免费 | 黄色毛片一级 | 激情欧美在线观看 | 99re8这里有精品热视频免费 | 日韩在线一区二区免费 | 91污视频在线观看 | 日本在线观看中文字幕 | 色综合激情网 | 亚洲在线视频免费 | 91精品国自产在线观看 | 精品久久精品久久 | 毛片网免费 | 日韩激情av在线 | 99热在线观看 | 国产夫妻自拍av | 97av在线 | 在线观看视频国产 | 国产精品理论片 | 欧美日韩视频网站 | 亚洲精品视频在线免费播放 | 成人免费大片黄在线播放 | 色国产视频 | 免费h精品视频在线播放 | 91在线免费视频观看 | 99精品免费久久久久久久久日本 | 国产中的精品av小宝探花 | 亚洲免费资源 | 成人久久国产 | 四虎免费av | 手机在线观看国产精品 | 久久久久久欧美二区电影网 | 国产原创91 | 黄色软件大全网站 | 中文字幕黄色 | 一本一道久久a久久精品 | 免费日韩视频 | 亚洲国产精品一区二区久久hs | 国产精品久久久久久久妇 | 久久久久久免费毛片精品 | 久久久99精品免费观看app | 欧美日韩一区二区在线 | 国产五月| 精品美女久久久久久免费 | 天堂av在线免费观看 | 国产精品九九久久久久久久 | 日韩三级视频在线观看 | www.av免费观看 | 九草视频在线 | 毛片一区二区 | 中文字幕在线看视频国产中文版 | 99热精品免费观看 | 欧美成人高清 | 日日干综合 | 91久久国产综合精品女同国语 | www在线免费观看 | 在线v片| 在线观看中文 | 99麻豆久久久国产精品免费 | 99国内精品 | 一区 二区电影免费在线观看 | 婷婷在线精品视频 | 91视频免费看片 | 麻豆视频在线免费观看 | 国产精品国产亚洲精品看不卡 | 中文字幕人成人 | 国产精品video爽爽爽爽 | 天堂在线视频中文网 | av不卡在线看| 欧美中文字幕第一页 | 亚洲成成品网站 | 奇米网网址 | 中文字幕亚洲欧美日韩 | 国产成人高清av | 丁香九月激情 | 91国内在线| 五月情婷婷 | 色小说在线 | 日韩精品一卡 | 亚洲电影图片小说 | 免费黄色在线播放 | 亚洲 欧洲 国产 精品 | 丁香婷婷久久久综合精品国产 | 亚洲精品乱码久久久久久高潮 | 亚洲2019精品 | 成人黄色电影免费观看 | 国产一级片观看 | 亚洲 成人 欧美 | 99热这里只有精品国产首页 | 欧美日韩精品在线观看视频 | 在线观看视频一区二区 | 久久福利 | 国产系列 在线观看 | 久久久久久久影视 | 国产精品免费在线观看视频 | 91在线免费播放 | 久久综合久久鬼 | 91视频亚洲 | 欧美日韩国产在线精品 | 911久久香蕉国产线看观看 | 精品少妇一区二区三区在线 | 国产精品毛片一区视频播不卡 | 美女精品久久久 | 日韩av成人免费看 | 午夜视频在线观看一区二区三区 | 久久人人爽人人片av | 国产精品一区免费看8c0m | 精品99免费 | av理论电影| 婷婷色影院 | 91精品视频一区二区三区 | 国产美女永久免费 | 日日日日干 | 久草在线中文视频 | 欧美日韩国产网站 | 久久久久久久久精 | 日本久久精品 | 免费韩国av | 91精品国产综合久久婷婷香蕉 | 亚洲理论在线观看电影 | 999久久久久 | 久久99久久99精品免视看婷婷 | 免费看短| 国产精品久久久久久久久久久久冷 | 一本到视频在线观看 | av免费观看网站 | 丁香婷婷成人 | 国内精品在线看 | 五月天久久| 国产一级淫片在线观看 | 三级黄免费看 | 日韩精品免费在线视频 | 日韩在线 一区二区 | 伊人国产在线播放 | 黄色91免费观看 | 日日夜夜骑 | 久操视频在线 | 免费久草视频 | 一区国产精品 | 久久精品国产一区二区三 | 国产精品a久久 | 中文亚洲欧美日韩 | h久久| 韩国一区二区三区视频 | 天天干天天插伊人网 | av成人动漫在线观看 | 狠狠躁夜夜av | 最近中文字幕免费av | 成人黄色在线观看视频 | 欧美一区日韩精品 | 狠狠色网 | 在线观看国产一区 | 欧美色综合天天久久综合精品 | 成人久久免费视频 | 不卡的av片 | 91麻豆免费视频 | 日本巨乳在线 | 黄色免费视频在线观看 | 久久精品国产精品亚洲 | 一区二区三区免费播放 | 国产精品去看片 | 香蕉视频国产在线观看 | 中文字幕在线播放第一页 | 国产精品爽爽久久久久久蜜臀 | 国产成人777777 | 在线免费黄色片 | 久久蜜臀一区二区三区av | 久久综合色播五月 | 久久综合九色欧美综合狠狠 | 欧美黑人性爽 | 色婷婷av一区 | 97超碰中文字幕 | 97在线观看免费高清 | 91污污视频在线观看 | 亚洲伊人网在线观看 | 亚洲成av人片在线观看香蕉 | 欧美天天综合网 | 久章草在线| 日本韩国中文字幕 | 日日操天天操狠狠操 | 国产91粉嫩白浆在线观看 | 国产日韩在线一区 | 一区二区不卡视频在线观看 | 国产麻豆剧传媒免费观看 | 天操夜夜操 | 国产不卡毛片 | 69久久99精品久久久久婷婷 | 91av成人| 国产成人精品久久亚洲高清不卡 | 麻豆视频在线播放 | 午夜 久久 tv | 中文字幕av网站 | 日韩欧美视频免费看 | 午夜电影中文字幕 | 免费情缘| 天天·日日日干 | 久久视频一区二区 | 国产成人精品在线播放 | 欧美久久久久 | 欧美一级电影在线观看 | 操老逼免费视频 | 在线v片免费观看视频 | 日韩区在线观看 | 亚洲h色精品 | 六月丁香六月婷婷 | 中文字幕色播 | 91麻豆精品 | 国产麻豆精品95视频 | h视频日本 | 欧美日韩精品在线一区二区 | 亚洲人人精品 | 国产精品一区二区三区在线播放 | 色就是色综合 | 成年人在线观看网站 | 久久久久高清 | 美女精品在线观看 | 999久久a精品合区久久久 | 国产黄色大全 | 精壮的侍卫呻吟h | 黄色毛片视频免费观看中文 | 五月天婷婷视频 | 涩涩网站在线看 | 国产乱对白刺激视频在线观看女王 | 日本精品在线看 | 国产在线视频一区二区三区 | 午夜精品久久久久久99热明星 | 精品国产欧美 | 中文字幕资源网在线观看 | 亚洲天堂视频在线 | 欧美日韩一级久久久久久免费看 | 日本韩国中文字幕 | 日韩欧美一区二区在线播放 | 国产成人精品亚洲日本在线观看 | 久久一区二区三区国产精品 | 午夜私人影院 | 免费观看一级视频 | 天天摸夜夜操 | 中文字幕国产在线 | 亚洲精品影院在线观看 | 五月在线视频 | 国产精品女人网站 | 欧美日韩精品在线播放 | 中文乱幕日产无线码1区 | 精品中文字幕在线 | 久久久久久久久久久久国产精品 | 夜夜嗨av色一区二区不卡 | 婷婷深爱 | 中国一级片免费看 | www在线观看视频 | 欧美激情综合五月色丁香 | 成人一级片视频 | 91免费国产在线观看 | 亚洲伦理一区 | 天天色.com | 国产精品久久久久一区二区三区 | 色婷婷电影 | 一区免费观看 | 国产精品麻豆三级一区视频 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 一级黄色在线免费观看 | 91在线视频观看免费 | 日本午夜在线观看 | wwwwwww黄| 不卡国产视频 | 免费看污黄网站 | 久久中文字幕视频 | 最近最新中文字幕视频 | 国产精品久久久久久久久久新婚 | 国产在线视频一区二区三区 | 99久高清在线观看视频99精品热在线观看视频 | sesese图片| 国产91国语对白在线 | 国产在线精品国自产拍影院 | 97超碰免费在线观看 | 日韩电影中文,亚洲精品乱码 | 日韩在线观看你懂的 | 亚洲欧美视频网站 | 91精品国产自产91精品 | 97色婷婷 | 婷婷在线观看视频 | 国产精品三级视频 | 丁香五月网久久综合 | 国产五月色婷婷六月丁香视频 | 99精品一区二区 | av综合在线观看 | 国产免费一区二区三区最新6 | 99色在线视频 | 欧美日韩国产在线 | 久久亚洲综合国产精品99麻豆的功能介绍 | 欧美二区视频 | www.夜夜干.com | 91桃色国产在线播放 | 欧美色图88 | 国产淫片| 国产精品美女久久久久久久久久久 | 国产精品毛片一区 | 国产在线精品一区 | 97超碰人人澡 | 国产成人一区二区三区电影 | 91色在线观看视频 | 免费看片成年人 | 久久精品国产精品亚洲 | 97电影网手机版 | 色婷婷啪啪免费在线电影观看 |