日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

res里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)

發(fā)布時(shí)間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 res里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(1)drawable-hdpi里面存放高分辨率的圖片,如WVGA (480x800),FWVGA (480x854)

  (2)drawable-mdpi里面存放中等分辨率的圖片,如HVGA (320x480)

  (3)drawable-ldpi里面存放低分辨率的圖片,如QVGA (240x320)


ldpi:240x320

mdpi:320x480 hdpi:480x800、480x854 xhdpi:至少960*720 xxhdpi:1280×720

android 自適應(yīng) 多屏幕支持 1、屏幕相關(guān)概念
1.1分辨率
是指屏幕上有橫豎各有多少個(gè)像素
1.2屏幕尺寸
指的是手機(jī)實(shí)際的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸
android將屏幕大小分為四個(gè)級(jí)別(small,normal,large,and extra large)。
1.3屏幕密度
每英寸像素?cái)?shù)
手機(jī)可以有相同的分辨率,但屏幕尺寸可以不相同,
Diagonal pixel表示對(duì)角線的像素值(=),DPI=933/3.7=252
android將實(shí)際的屏幕密度分為四個(gè)通用尺寸(low,medium,high,and extra high)
一般情況下的普通屏幕:ldpi是120dpi,mdpi是160dpi,hdpi是240dpi,xhdpi是320dpi
對(duì)于屏幕來(lái)說(shuō),dpi越大,屏幕的精細(xì)度越高,屏幕看起來(lái)就越清楚
1.4密度無(wú)關(guān)的像素(Density-independent pixel——dip)
dip是一種虛擬的像素單位
dip和具體像素值的對(duì)應(yīng)公式是dip/pixel=dpi值/160,也就是px = dp * (dpi / 160)
當(dāng)你定義應(yīng)用的布局的UI時(shí)應(yīng)該使用dp單位,確保UI在不同的屏幕上正確顯示。

手機(jī)屏幕分類和像素密度的對(duì)應(yīng)關(guān)系如表1所示

手機(jī)尺寸分布情況(http://developer.android.com/resources/dashboard/screens.html)如圖所示,

目前主要是以分辨率為800*480和854*480的手機(jī)用戶居多
從以上的屏幕尺寸分布情況上看,其實(shí)手機(jī)只要考慮3-4.5寸之間密度為1和1.5的手機(jī)

2、android多屏幕支持機(jī)制
Android的支持多屏幕機(jī)制即用為當(dāng)前設(shè)備屏幕提供一種合適的方式來(lái)共同管理并解析應(yīng)用資源。
Android平臺(tái)中支持一系列你所提供的指定大小(size-specific),指定密度(density-specific)的合適資源。
指定大小(size-specific)的合適資源是指small, normal, large, and xlarge。
指定密度(density-specific)的合適資源,是指ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high).
Android有個(gè)自動(dòng)匹配機(jī)制去選擇對(duì)應(yīng)的布局和圖片資源
1)界面布局方面
根據(jù)物理尺寸的大小準(zhǔn)備5套布局:
layout(放一些通用布局xml文件,比如界面頂部和底部的布局,不會(huì)隨著屏幕大小變化,類似windos窗口的title bar),
layout-small(屏幕尺寸小于3英寸左右的布局),
layout-normal(屏幕尺寸小于4.5英寸左右),
layout-large(4英寸-7英寸之間),
layout-xlarge(7-10英寸之間)
2)圖片資源方面
需要根據(jù)dpi值準(zhǔn)備5套圖片資源:
drawable:主要放置xml配置文件或者對(duì)分辨率要求較低的圖片
drawalbe-ldpi:低分辨率的圖片,如QVGA (240x320)
drawable-mdpi:中等分辨率的圖片,如HVGA (320x480)
drawable-hdpi:高分辨率的圖片,如WVGA (480x800),FWVGA (480x854)
drawable-xhdpi:至少960dp x 720dp
Android有個(gè)自動(dòng)匹配機(jī)制去選擇對(duì)應(yīng)的布局和圖片資源。
  系統(tǒng)會(huì)根據(jù)機(jī)器的分辨率來(lái)分別到這幾個(gè)文件夾里面去找對(duì)應(yīng)的圖片。
  在開(kāi)發(fā)程序時(shí)為了兼容不同平臺(tái)不同屏幕,建議各自文件夾根據(jù)需求均存放不同版本圖片。

3、AndroidManifest.xml 配置
android從1.6和更高,Google為了方便開(kāi)發(fā)者對(duì)于各種分辨率機(jī)型的移植而增加了自動(dòng)適配的功能
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/>
3.1是否支持多種不同密度的屏幕
android:anyDensity=["true" | "false"]
如果android:anyDensity="true"
指應(yīng)用程序支持不同密度,會(huì)根據(jù)屏幕的分辨率自動(dòng)去匹配。
如果android:anyDensity="false"
應(yīng)用程序支持不同密度,系統(tǒng)自動(dòng)縮放圖片尺寸和這個(gè)圖片的坐標(biāo)。具體解釋一下系統(tǒng)是如何自動(dòng)縮放資源的。
例如我們?cè)趆dpi,mdpi,ldpi文件夾下?lián)碛型环N資源,那么應(yīng)用也不會(huì)自動(dòng)地去相應(yīng)文件夾下尋找資源,這種情況都是出現(xiàn)在高密度,以及低密度的手機(jī)上,比如說(shuō)一部240×320像素的手機(jī),
如果設(shè)置android:anyDensity="false",Android系統(tǒng)會(huì)將240 x 320(低密度)轉(zhuǎn)換為 320×480(中密度),這樣的話,應(yīng)用就會(huì)在小密度手機(jī)上加載mdpi文件中的資源。
3.2是否支持大屏幕
android:largeScreens=["true" | "false"]
如果在聲明不支持的大屏幕,而這個(gè)屏幕尺寸是larger的話,系統(tǒng)使用尺寸為("normal")和密度為("medium)顯示,
不過(guò)會(huì)出現(xiàn)一層黑色的背景。
3.3是否支持小屏幕
android:smallScreens=["true" | "false"]
如果在聲明不支持的小屏幕,而當(dāng)前屏幕尺寸是smaller的話,系統(tǒng)也使用尺寸為("normal")和密度為("medium)顯示
如果應(yīng)用程序能在小屏幕上正確縮放(最低是small尺寸或最小寬度320dp),那就不需要用到本屬性。否則,就應(yīng)該為最小屏幕寬度標(biāo)識(shí)符設(shè)置本屬性
來(lái)匹配應(yīng)用程序所需的最小尺寸。


4、Android提供3種方式處理屏幕自適應(yīng)
4.1預(yù)縮放的資源(基于尺寸和密度去尋找圖片)
1)如果找到相應(yīng)的尺寸和密度,則利用這些圖片進(jìn)行無(wú)縮放顯示。
2)如果沒(méi)法找到相應(yīng)的尺寸,而找到密度,則認(rèn)為該圖片尺寸為 "medium",利用縮放顯示這個(gè)圖片。
3)如果都無(wú)法匹配,則使用默認(rèn)圖片進(jìn)行縮放顯示。默認(rèn)圖片默認(rèn)標(biāo)配 "medium" (160)。
4.2自動(dòng)縮放的像素尺寸和坐標(biāo)(密度兼容)
1)如果應(yīng)用程序不支持不同密度android:anyDensity="false",系統(tǒng)自動(dòng)縮放圖片尺寸和這個(gè)圖片的坐標(biāo)。
2)對(duì)于預(yù)縮放的資源,當(dāng)android:anyDensity="false",也不生效。
3)android:anyDensity="false",只對(duì)密度兼容起作用,尺寸兼容沒(méi)效果
4.3兼容更大的屏幕和尺寸(尺寸兼容)
1)對(duì)于你在聲明不支持的大屏幕,而這個(gè)屏幕尺寸是normal的話,系統(tǒng)使用尺寸為 ("normal")和密度為("medium)顯示。
2.)對(duì)于你在聲明不支持的大屏幕,而這個(gè)屏幕尺寸是larger的話,系統(tǒng)同樣使用尺寸為("normal")和密度為("medium)顯示,
不過(guò)會(huì)出現(xiàn)一層黑色的背景。

5、Android系統(tǒng)自動(dòng)適配技巧
Android系統(tǒng)采用下面兩種方法來(lái)實(shí)現(xiàn)應(yīng)用的自動(dòng)適配:
1)布局文件中定義長(zhǎng)度的時(shí)候,最好使用wrap_content,fill_parent, 或者dp 進(jìn)行描述,這樣可以保證在屏幕上面展示的時(shí)候有合適的大小
2)為不同屏幕密度的手機(jī),提供不同的位圖資源,可以使得界面清晰無(wú)縮放。
對(duì)應(yīng)bitmap 資源來(lái)說(shuō),自動(dòng)的縮放有時(shí)會(huì)造成放大縮小后的圖像變得模糊不清,這是就需要應(yīng)用為不同屏幕密度配置提供不同的資源:為高密度的屏幕提供高清晰度的圖像等。
3)不要使用AbsoluteLayout
4)像素單位都使用DIP,文本單位使用SP

6、在代碼中獲取屏幕像素、屏幕密度
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels; // 屏幕寬度(像素)
int height = metric.heightPixels; // 屏幕高度(像素)
float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240)

7、 一般多分辨率處理方法及其缺點(diǎn)
7.1 圖片縮放
基于當(dāng)前屏幕的精度,平臺(tái)自動(dòng)加載任何未經(jīng)縮放的限定尺寸和精度的圖片。如果圖片不匹配,平臺(tái)會(huì)加載默認(rèn)資源并且在放大或者縮小之后可以滿足當(dāng)前界面的顯示要求。例如,當(dāng)前為高精度屏幕,平臺(tái)會(huì)加載高精度資源(如HelloAndroid中drawable-hdpi 中的位圖資源),如果沒(méi)有,平臺(tái)會(huì)將中精度資源縮放至高精度,導(dǎo)致圖片顯示不清晰。
7.2 自動(dòng)定義像素尺寸和位置
如果程序不支持多種精度屏幕,平臺(tái)會(huì)自動(dòng)定義像素絕對(duì)位置和尺寸值等,這樣就能保證元素能和精度160 的屏幕上一樣能顯示出同樣尺寸的效果。例如,要讓W(xué)VGA 高精度屏幕和傳統(tǒng)的HVGA 屏幕一樣顯示同樣尺寸的圖片,當(dāng)程序不支持時(shí),系統(tǒng)會(huì)對(duì)程序慌稱屏幕分辨率為320×480,在(10,10)到(100,100)的區(qū)域內(nèi)繪制圖形完成之后,系統(tǒng)會(huì)將圖形放大到(15,15)到(150,150)的屏幕顯示區(qū)域。
7.3 兼容更大尺寸的屏幕
當(dāng)前屏幕超過(guò)程序所支持屏幕的上限時(shí),定義supportsscreens元素,這樣超出顯示的基準(zhǔn)線時(shí),平臺(tái)在此顯示黑色的背景圖。例如,WVGA 中精度屏幕上,如程序不支持這樣的大屏幕,系統(tǒng)會(huì)謊稱是一個(gè)320×480 的,多余的顯示區(qū)域會(huì)被填充成黑色。
7.4 采用OpenGL 動(dòng)態(tài)繪制圖片
Android 底層提供了OpenGL 的接口和方法,可以動(dòng)態(tài)繪制圖片,但是這種方式對(duì)不熟悉計(jì)算機(jī)圖形學(xué)的開(kāi)發(fā)者來(lái)講是一個(gè)很大的挑戰(zhàn)。一般開(kāi)發(fā)游戲,采用OpenGL 方式。
7.5 多個(gè)apk 文件
Symbian 和傳統(tǒng)的J2ME 就是采用這種方式,為一款應(yīng)用提供多個(gè)分辨率版本,用戶根據(jù)自己的需求下載安裝相應(yīng)的可執(zhí)行文件。針對(duì)每一種屏幕單獨(dú)開(kāi)發(fā)應(yīng)用程序不失為一種好方法,但是目前Google Market 對(duì)一個(gè)應(yīng)用程序多個(gè)分辨率版本的支持還不完善,開(kāi)發(fā)者還是需要盡可能使用一個(gè)apk 文件適應(yīng)多個(gè)分辨率。


本文歡迎轉(zhuǎn)載,但請(qǐng)注明作者與出處:

作者:流星

出處:http://blog.sina.com.cn/staratsky

總結(jié)

以上是生活随笔為你收集整理的res里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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