收藏本站 收藏本站
積木網首頁 - 軟件測試 - 常用手冊 - 站長工具 - 技術社區
首頁 > Android > Android技巧 > 正文

首頁 - PHP - 數據庫 - 操作系統 - 游戲開發 - JS - Android - MySql - Redis - MongoDB - Win8 - Shell編程 - DOS命令 - jQuery - CSS樣式 - Python - Perl

Access - Oracle - DB2 - SQLServer - MsSql2008 - MsSql2005 - Sqlite - PostgreSQL - node.js - extjs - JavaScript vbs - Powershell - Ruby

教你來徹底理解ldpi、mdpi、hdpi、xhdpi、xxhdpi

1 首先你得知道

相信很多人都不是很理解ldpi、mdpi、hdpi、xhdpi、xxhdpi里面到底是根據什么來進行劃分的,其實我一直以為是根據分辨率來區分,其實這四個文件夾和具體的屏幕分辨率是沒直接關系的,上面說的做法也有一定道理,因為大部分的720*1280的手機都是高密度手機,1080*1920都是超高密度手機,但是這四個文件夾之和屏幕密度有關,和具體分辨率無關。

1 Android手機目前常見的分辨率

1.1 手機常見分辨率:

4:3
VGA 640*480 (Video Graphics Array)
QVGA 320*240 (Quarter VGA)
HVGA 480*320 (Half-size VGA)
SVGA 800*600 (Super VGA)

5:3
WVGA 800*480 (Wide VGA)

16:9
FWVGA 854*480 (Full Wide VGA)
HD 1920*1080 High Definition
QHD 960*540
720p 1280*720 標清
1080p 1920*1080 高清

手機:
iphone 4/4s 960*640 (3:2)
iphone5 1136*640
小米1 854*480(FWVGA)
小米2 1280*720

1.2 分辨率對應DPI
"HVGA mdpi"

"WVGA hdpi "
"FWVGA hdpi "
"QHD hdpi "
"720P xhdpi"
"1080P xxhdpi "

下面給出一個最最關鍵的等式:
low:medium:high:extra-high:extra-extra-high=3:4:6:8:12

OK,就是說五個文件夾的比例為3:4:6:8:12。具體是怎么回事呢?下面分析一下:
比如我用一個480*800的4寸手機,這個手機的屏幕密度按照Google的說法,就屬于密度為high level的水平(通過分辨率和屏幕尺寸計算密度,然后google自己有一套標準說你位于哪個范圍屬于哪個level的密度水平),然后這個手機的應用在用圖片的時候,就會去hdpi下去找,并且以這個文件夾的圖片為標準,也就是說比如我的應用去取一張aa.png的圖片,這個圖片的原圖尺寸為30*30,恰好hdpi下有一張,那這張圖片顯示到屏幕上以后,它的顯示尺寸長寬都為30px。那問題來了,但如果我的hdpi下沒有這張圖片,而只在xhdpi下有這張圖片,圖片的原圖尺寸是30*30,那請問顯示到屏幕上的圖片的尺寸會是多大呢,還是長寬都為30px嗎?
答案是否定的,而且現在就用到了上面那個比例,high:extra-high=6:8。先明確這樣一個問題,如果我的屏幕是hdpi的,結果我的圖片是放到了xhdpi下,那系統會把這張圖片進行縮小顯示,也就是說我的xhdpi下放了一張30*30的圖片,那顯示當hdpi屏幕上肯定要比30*30小,這樣才能保證說大小屏幕界面顯示效果是一致的,因為密度小的手機顯示一張圖片要比密度大的手機顯示同一張圖片的面積要大,要想顯示面積一樣就必須要把圖片搞小點。接上面的問題,假設顯示在我的hdpi屏幕上的圖片的寬度為x,那滿足以下等式:
6:8=x:30 。
可得到x=22.3,向后取整數得23 。

2 屏幕適配的注意事項 2.1 基本設置

2.1.1 AndroidManifest.xml設置

在中Menifest中添加子元素

android:anyDensity="true"時,應用程序安裝在不同密度的終端上時,程序會分別加載xxhdpi、xhdpi、hdpi、mdpi、ldpi文件夾中的資源。

相反,如果設為false,即使在文件夾下擁有相同資源,應用不會自動地去相應文件夾下尋找資源:

1) 如果drawable-hdpi、drawable-mdpi、drawable-ldpi三個文件夾中有同一張圖片資源的不同密度表示,那么系統會去加載drawable_mdpi文件夾中的資源;

2) 如果drawable-hpdi中有高密度圖片,其它兩個文件夾中沒有對應圖片資源,那么系統會去加載drawable-hdpi中的資源,其他同理;

3) 如果drawable-hdpi,drawable-mdpi中有圖片資源,drawable-ldpi中沒有,系統會加載drawable-mdpi中的資源,其他同理,使用最接近的密度級別。

2.1.2 橫屏豎屏目錄區分

1) drawable

a) drawable-hdpi該圖片即適用于橫屏,也適用于豎屏;

b) drawable-land-hdpi,當屏幕為橫屏,且為高密度時,加載此文件夾的資源;

c) drawable-port-hdpi,當屏幕為豎屏,且為高密度時,加載此文件夾中的資源。其他同理。

2) layout

在res目錄下建立layout-port和layout-land兩個目錄,里面分別放置豎屏和橫屏兩種布局文件,以適應對橫屏豎屏自動切換。

2.2 多屏幕適配的4條黃金原則

1) 在layout文件中設置控件尺寸時應采用fill_parent、wrap_content、match_parent和dp;

具體來說,設置view的屬性android:layout_width和android:layout_height的值時,wrap_content,match_parent或dp比px更好,文字大小應該使用sp來定義。

2) 在程序的代碼中不要出現具體的像素值,在dimens.xml中定義;

為了使代碼簡單,android內部使用pix為單位表示控件的尺寸,但這是基于當前屏幕基礎上的。為了適應多種屏幕,android建議開發者不要使用具體的像素來表示控件尺寸。

3) 不使用AbsoluteLayout(android1.5已廢棄) ,可以使用RelativeLayout替代;

4) 對不同的屏幕提供合適大小的圖片。

不同大小屏幕用不同大小的圖片,low:medium:high:extra-high圖片大小的比例為3:4:6:8;舉例來說,對于中等密度(medium)的屏幕你的圖片像素大小為48×48,那么低密度(low)屏幕的圖片大小應為36×36,高(high)的為72×72,extra-high為96×96。

2.3 使用9-patch PNG圖片

使用圖片資源時,如果出現拉伸,因為圖片處理的原因,會變形,導致界面走形。9-patch PNG圖片也是一種標準的PGN圖片,在原生PNG圖片四周空出一個像素間隔,用來標識PNG圖片中哪些部分可以拉伸、哪些不可以拉伸、背景上的邊框位置等。

“上、左”定義可拉伸區域

“右、下”定義顯示區域,如果用到完整填充的背景圖,建議不要通過android:padding來設置邊距,而是通過9-patch方式來定義。

Android SDK中提供了編輯9-Patch圖片的工具,在tools目錄下draw9patch.bat,能夠立刻看到編輯后的拉伸效果,也可以直接用其他圖片編輯工具編輯,但是看不到效果。

2.4 不同的layout

Android手機屏幕大小不一,有480x320, 640x360, 800x480……

怎樣才能讓Application自動適應不同的屏幕呢?

其實很簡單,只需要在res目錄下創建不同的layout文件夾,比如:layout-640x360、layout-800x480……所有的layout文件在編譯之后都會寫入R.java里,而系統會根據屏幕的大小自己選擇合適的layout進行使用。

2.5 測試驗證

一般使用AVD Manager創建多個不同大小的模擬器,如果條件具備,也可以直接用真機測試。



OK,這就是對這五個文件夾的徹底理解~ 謝謝~

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

Android 官方百分比適配庫
AndroidPercentSupportLib概述由于Android機型種類眾多,屏幕的碎片化也非常的嚴重。這對于UI布局的適配來說也是非常麻煩的一個事情。一種做法是:以不同

談談Android 程序框架設計
做第一個項目的時候,自己組織結構和設計,最后效果實現了,但是發現自己寫的代碼和架構真的是太亂了,所以我覺得要有一個規劃的目標,讓自己

Android通過HttpURLConnection獲取JSON并進行UI更新
本例子中使用的是:HttpURLConnectionThreadHandler的組合,在newThread中通過HttpURLConnection獲取JSON數據后并在Handler里對UI界面進行更新。也可以用過HttpClient,Asyn

本周排行

更新排行

強悍的草根IT技術社區,這里應該有您想要的! 友情鏈接:b2b電子商務
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP備05050695號
捕鱼大师辅助软件 广西快乐双彩2013年开奖 北京pk10牛逼计划 北京体彩11选5开奖查询结果 浙江20选5每周 大乐透开奖结果查询 线上配资 精准5码中特绝不改料 浙江20选5一等奖奖金多少 炒股赚钱吗? 云南11选5历史开奖结果 pk10单期稳定计划 安装中国福利彩票软件 辽宁福彩35选7昨天开奖结果 东方财富网股票行情 官方极速赛车微信群 河北快三基本走势图