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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android屏幕适配详解

發布時間:2024/10/12 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android屏幕适配详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

android屏幕適配詳解

官方地址:http://developer.android.com/guide/practices/screens_support.html

?

一、關于布局適配建議

1、不要使用絕對布局 2、盡量使用match_parent 而不是fill_parent 。 3、能夠使用權重的地方盡量使用權重(android:layout_weight) 4、如果是純色背景,盡量使用android的shape 自定義。 5、如果需要在特定分辨率下適配,可以在res目錄上新建layout-HxW.xml的文件夾。比如要適配1080*1800的屏幕(魅族MX3采用此分辨率)則新建layout-1800x1080.xml的文件夾,然后在下面定義布局。Android系統會優先查找分辨率相同的布局,如果不存在則換使用默認的layout下的布局。

二、術語和概念

四種屏幕尺寸分類:: small, normal, large, and xlarge
四種密度分類: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high)
需要注意的是: xhdpi是從?Android?2.2 (API Level 8)才開始增加的分類.
xlarge是從Android 2.3 (API Level 9)才開始增加的分類.
DPI是“dot per inch”的縮寫,每英寸像素數。

一般情況下的普通屏幕:ldpi是120,mdpi是160,hdpi是240,xhdpi是320。

?

三、如何做到自適應屏幕大小呢?

1)界面布局方面

?? 需要根據物理尺寸的大小準備5套布局,layout(放一些通用布局xml文件,比如界面中頂部和底部的布局,不會隨著屏幕大小變化,類似windos窗口的title bar),layout-small(屏幕尺寸小于3英寸左右的布局),layout-normal(屏幕尺寸小于4.5英寸左右),layout-large(4英寸-7英寸之間),layout-xlarge(7-10英寸之間)

2)圖片資源方面

? 需要根據dpi值準備5套圖片資源,drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi

Android有個自動匹配機制去選擇對應的布局和圖片資源

?

四、兩種獲取屏幕分辨率信息的方法:

DisplayMetrics metrics = new DisplayMetrics();
Display display = activity.getWindowManager().getDefaultDisplay();
display.getMetrics(metrics);
//這里得到的像素值是設備獨立像素dp

//DisplayMetrics metrics=activity.getResources().getDisplayMetrics(); 這樣獲得的參數信息不正確,不要使用這種方式。
不能使用android.content.res.Resources.getSystem().getDisplayMetrics()。這個得到的寬和高是空的。

?

五、關于圖片制作

1)關于設計: 設計圖先定下一個要設計的尺寸,而且盡量采用在目前最流行的屏幕尺寸(比如目前占屏幕比重比較多的是480系列,也即是480*800或者400*854,下面的圖標制作也在次基礎上進行比例的換算)上設計。 先了解一下屏幕的級別:
屏幕級別 屏幕密度 比率(相對) 物理大小(英寸) 像素大小 通常的分辨率
ldpi 120 3 0.75 1 120 ?
mdpi 160 4 1 1 160 320*480
hdpi 240 6 1.5 1 240 480*800
xhdpi 320 8 2 1 320 720*1280
xxhdpi 480 12 3 1 480 1080*1800
說明: 屏幕級別: 注意屏幕級別是按照密度分級,和像素沒有關系。如果非要讓密度和像素扯上關系,則需要一個參照系,android使用mdpi級別作為標準參照屏幕,也就是說在320*480分辨率的手機上一個密度可以容納一個像素。然后其他密度級別則在此基礎上進行對比。如果理想情況下,480*800的屏幕一個密度可以容納1.5個像素。 物理大小: 單位是英寸而不是像素,也就說一個英寸在任何分辨率下顯示的大小都是一樣的,但是像素在密度不同的手機里面顯示的實際的大小是不一樣的(這就是為什么android手機需要適配的原因)。 然后就是重點。 假設1像素在160密度下顯示1英寸,則1像素在240密度基礎上顯示大約0.67英寸,在320密度下顯示0.5英寸。于是就出現一種情況,在電腦上的一個像素,在不同的手機上看實際的大小不一樣。那么怎么讓“設計效果”在不同的手機上看起來顯示的區域一樣呢? 還是假設一個像素在160密度下的顯示在一個密度內,也假設就是一英寸。那么需要幾個像素才能在240密度級別下顯示在一英寸范圍內呢?答案是1.5個像素(根據上圖的比率換算)。 了解了這個關系,接下來就是圖標的制作。 2)關于切圖。 關于切圖有幾個建議: 第一,長寬最好是3的倍數(根據android的推薦logo圖標的大小是48(mdpi),72(hdpi),96(xhdpi)得出的最小公約數)。 第二,長寬最好是偶數。因為奇數在進行等比壓縮的時候可能有問題。 第三,根據上面兩條,如果長寬是6的倍數最理想。 第四,如果可以拉伸而不改變設計意圖的情況下,比如純色背景,則使用android的9path工具制作成.9的圖片。 3)關于圖標的適配。 然后接下來的一切就和設計稿沒什么關系。在切好圖的基礎上,根據屏幕密度、像素和實際大小的比例關系。假如設計司在480*800的分辨率下做好了設計圖,并且切好圖,如果你需要適配720*1280屏幕,該怎么做?根據比例,他們的關系是2:3,于是你需要按照1.5倍比例制作圖標,比如你在480*800的設計稿上切下來一個20*20像素的圖,那么你就需要制作一個等比放大成30*30像素的圖標,這樣同一個圖標在480*800的屏幕和720*1280的屏幕上顯示的實際大小才一樣。同理,如果你需要適配xxhdpi則需要在20*20的基礎上制作一個等比放大成40*40像素的圖標。 4)關于圖標的目錄,480*800切下來的圖我們放在drawable-hdpi目錄下,按照2:3放大的圖標放在drawable-xhdpi目錄下,按照2倍放大的圖標放在drawable-xxhdpi目錄下。 android會根據手機的密度優先查找對應的目錄的資源, 比如408*800分辨率下的手機如果密度是160,則自動加載drawable-hdpi這個目錄下的圖標, 如果720*1280密度是240的手機自動加載drawable-xhdpi這個目錄下的圖標。如果沒有這個文件夾,則查找和240最接近的對應密度文件夾。 5)其它 接下來要說的估計會讓你失望,根據上面的步驟也不能完全解決適配的問題,只能是大概適配,而就算根據上面的步驟大概適配了,實際在手機上的效果也有出入。 比如魅族MX3的分辨率是1080*1800,標準情況下密度是480,但是他的密度大約是524,和480接近,也就是會查找drawable-xxhdpi這個資源下的文件。也就是說你在480*800分辨率下切圖然后按兩倍放大的圖標在這臺手機上顯示的效果還是比實際的小。 而另一個要說的問題是540*960或者640*960,他們的密度很可能是或者接近240也可能是320。于是在480*800的設計稿上切下來的圖并且進行的適配制作,在這些手機上顯示的實際大小也可能或大或小。 綜上所述,我也只是把我的理解和經驗分享一下,但是并不能完美適配屏幕,僅僅當做拋磚引玉,如果您路過并且看到這份建議,如果你正好有更好的方案能夠進行適配,請不吝賜教。 在代碼中獲取屏幕像素、屏幕密度?
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)?

DPI是“dot per inch”的縮寫,每英寸像素數。
一般情況下的普通屏幕:ldpi是120,mdpi是160,hdpi是240,xhdpi是320。
參考:http://developer.android.com/images/screens_support/screens-ranges.png

?

附加:配置限定符名稱

配置限定符值說明
MCC和MNC例如:
mcc310
mcc310-mnc004
mcc208-mnc00
MCC是移動國家代碼的英文首字母縮寫(The mobile country code),它的后面可選擇性的跟隨來自設備內的SIM卡的移動網絡代碼(MNC:mobile network code)。如在任何載體上,mcc310代表美國,mcc310-mnc004代表美國的Venizon公司,mcc208-mnc00代表法國的Orange公司。
如果設備使用音頻連接(GSM?電話),那么MCC和MNC的值來自SIM卡。
也可以單獨使用MCC(例如,在應用程序中包含特殊國家合法的資源)。如果僅需要指定語言環境,那么可以使用language和region限定符來替代(稍后討論)。如果決定要使用MCC和MNC限定符,就要仔細測試,使它能夠滿足你所期望的工作。
還可以查看配置域mcc和mnc,它們分別指示了當前的移動國家代碼和移動網絡代碼。
mcc:http://developer.android.com/reference/android/content/res/Configuration.html#mcc
mnc:http://developer.android.com/reference/android/content/res/Configuration.html#mnc
?
語言和地區例如:
en
fr
en-rUS
fr-rFR
fr-rCA
語言是用兩個字母的ISO 639-1語言代碼定義的,緊跟其后的是可選的兩個ISO-3166-1-appha-2地區代碼字母(前面是小寫的“r”)。
這個編碼不區分大小寫,r前綴被用于區分地區部分,不能夠單獨指定地區。
如果用戶改變了系統中的語言設置,那么在應用程序的運行期間也能夠改變為對應的語言。
最小寬度sw<N>dp
例如:
sw320dp
sw600dp
sw720dp
屏幕的基本尺寸,是指最短的可用屏幕區域。具體的說,設備的最小寬度是屏幕可用的寬度和高度中最短的那個(也可以把它看做是屏幕的最小可能的寬度)。這樣就可以使用這個限定符來確保應用程序至少有<N>dp的寬度可用于UI界面,而不管屏幕的當前方向。
例如,如果布局在任何時候都需要至少600dp的最小屏幕尺寸,那么就能夠使用這個限定符,在res/layout-sw600dp/目錄中創建布局資源。系統只會在可用屏幕的尺寸至少是600dp的時候才會使用這些資源,而不管600dp是否是被用戶認知的高度或寬度。最小寬度是設備的固定屏幕尺寸特征,當屏幕的方向發生改變時,設備的最小寬度不改變。
設備的最小寬度需要考慮屏幕的裝飾和系統UI的占用。例如,如果設備有一些固定的UI元素要沿著最小寬度的軸向,占用一定的屏幕空間,那么系統聲明的最小寬度要比實際的屏幕尺寸要小,因為被系統占用的像素部分對用戶應用程序的UI無效。因此,這個值應該是應用程序布局所需要的最小的實際尺寸(通常,這個值是布局支持的最小寬度,而不管屏幕的當前方向)。
以下是可以使用的通用屏幕尺寸的一些值:
1.320,針對以下屏幕配置的設備:
? 240x320ldpi(QVGA手持設備)
? 320x480mdpi(手持設備)
? 480x800hdpi(高分辨率手持設備)
2.480,針對480x800mdpi的屏幕(平板或手持設備)
3.600,針對600x1024mdip的屏幕(7英寸平板)
4.720,針對720x1280mdip的屏幕(10英寸平板)
當應用程序提供了多個帶有不同值的最小寬度限定符資源目錄時,系統會使用最接近(不超出)設備最小寬度的那個資源。
這個限定符被添加在API級別13中。
還要看android:requiresSmallestWidthDp屬性,它聲明了與你的應用程序兼容的最小的最小寬度,并且smallestScreenWidthDp配置字段會持有這個設備最小寬度的值。
可用寬度w<N>dp
例如:
w720dp
w1024dp
指定最小的可用屏幕寬度,在資源中應該以dp為單位來定義<N>的值。當方向在橫向和縱向之間改變時,這個配置值會跟當前的實際的寬度相匹配。
當應用程序給這個配置提供了多個不同值的資源目錄時,系統會使用最接近(不超過)設備當前屏幕寬度的那個配置。這個值需要考慮屏幕裝飾占據的空間,因此,如果設備在顯示的左邊或右邊有一些固定的UI元素,那么使用的寬度值就要比實際的屏幕尺寸小,因為這些固定UI元素的占用,使得應用程序的可用空間減少。
這個特性被添加在API級別13中
還要看screenWidthDp配置字段,它持有當前的屏幕寬度。
可用高度h<N>dp
例如:
h720dp
h1024dp
指定最小的可用屏幕高度,在資源中應該以dp為單位來定義<N>的值,當方向在橫向和縱向直接改變時,這個配置值應該跟當前的實際高度匹配。
當應用程序給這個配置提供了不同值的多個資源目錄時,系統會使用最接近(不超過)設備當前屏幕高度的那個配置。這個要考慮屏幕裝飾的占用情況,因此,如果設備在顯示的上方或底部有一些固定的UI元素,那么要使用的高度值要比實際的屏幕尺寸小,因為這些固定UI元素的占用,使得應用程序的可用空間減少。不固定的屏幕裝飾(如電話的狀態欄能夠在全屏時被隱藏)是不考慮的,像標題欄或操作欄這樣的窗口裝飾也不考慮,因此應用必須準備處理比它們指定的空間要小的情況。
這個限定符被添加在API級別13中。
還要看screenHeightDp配置字段,它持有當前屏幕的高度。
屏幕尺寸small
normal
large
xlarge
small:這種屏類似低分辨率的QVGA屏幕。對于小屏的最小布局尺寸大約是320x426dp。例如QVGA低分辨率和VGA高分辨率。
normal:這種屏類似中等分辨率的HVGA屏幕。對于普通屏幕的最小布局尺寸大約是320x470dp。如,WQVGA低分辨率屏、HVGA中等分辨率屏、WVGA高分辨率屏。
large:這種屏類似中等分辨率的VGA屏幕,對于大屏幕的最小布局尺寸大約是480x640dp。例如VGA和WVGA的中等分辨率屏。
xlarge:這種屏被認為比傳統的中等分辨率的HVGA屏幕大。針對xlarge屏的最小布局尺寸大約是720x960dp。在大多數情況下,這種超大屏幕的設備因為太大而要放到背包中來攜帶,而且最有可能的是平板樣式的設備。
注意:使用尺寸限定符不意味著資源僅用于這個尺寸的屏幕。如果沒有用限定符提供與當前設備配置相匹配的可選資源,那么系統會使用與配置最接近的資源。
警告:如果所有使用尺寸限定符的資源都比當前屏幕大,那么系統將不會使用它們,并且應用程序會在運行時崩潰(例如,如果所有的布局都被標記了xlarge限定符,而設備卻是一個普通尺寸的屏幕)。
這個限定符被添加在API級別4以后的版本中。
屏幕外觀long
notlong
long:長屏幕,如WQVGA、WVGA、FWVGA
notlong:非長屏幕,如QVGA、HVGA、VGA
這個限定符被添加在API級別4以后的版本中
這個限定符完全是基于屏幕的外觀比率,不相對屏幕的方向。
還要看screenLayout配置字段,它指示了屏幕是否是長屏。
屏幕方向port
land
port:縱向設備(垂直)
land:橫向設備(水平)
如果用戶旋轉屏幕,這個限定能夠在應用程序運行期間改變。
orientation配置字段指示當前設備的方向。
泊位模式car
desk
car:設備停靠在汽車中
desk:設備停靠在書桌中
這個限定符被添加在API級別8以后的版本中
如果用戶改變了設備的停靠地點,那么能夠在應用程序的運行期間改變這個限定。可以使用UiModeManager對象來啟用或禁止這種模式。
夜間模式night
notnight
night:夜間
notnight:白天
被添加在API級別8以后的版本中
如果夜間模式被保留在自動模式中(默認),那么在應用程序運行期間,會基于白天的時間來進行模式的改變。可以使用UiModeManager對象來啟用或禁止這種模式。
屏幕像素密度(dpi)ldpi
mdpi
hdpi
xhdpi
nodpi
tvdpi
ldpi:針對大約120dpi的低分辨率屏幕;
mdpi:針對大約160dpi的中等分辨率屏幕(在傳統的HVGA上);
hdpi:針對大約240dpi的高分辨率屏幕;
xhdpi:針對大約320dpi的超高分辨率屏幕,被添加在API基本8以后的版本中;
nodpi:這個限定被用于不想根據匹配的設備分辨率進行縮放的位圖資源。
tvdpi:在mdpi和hdpi之間的屏幕,大約是213dpi。這種分組不是主要的分辨率,大多數是為電視來考慮的,并且大多數應用不需要它---提供mdpi和hdpi資源就可以滿足大多數應用程序需要了,并且系統會適當的縮放它們。這個限定符在API級別13以后被引入。
四種主要的分辨率之間的縮放比例是:3:4:6:8(忽略tvdpi分辨率),因此一個9x9的ldpi位圖,在mdpi中是12x12、在hdpi中是18x18、在xhdpi中是24x24。
如果感覺在電視或其他某些設備上的圖片資源不好看,并且想要試用tvdpi資源,那么縮放因子是1.33*mdpi。例如,一個100px x 100px的mdpi圖片的圖片應該被放大成133px x 133px的tvdpi圖片。
注意:使用分辨率限定符不意味著資源僅適用與對應分辨率的屏幕。如果沒有提供與當前設備配置匹配的可選資源,那么系統會使用最接近的資源。
觸屏類型notouch
stylus
finger
notouch:非觸屏設備
stylus:有適用手寫筆的電阻屏設備
finger:觸屏設備
touchscreen配置字段,指示到了設備上的觸屏類型。
鍵盤可用性keysexposed
keyshidden
keyssoft
keysexposed:設備有可用的鍵盤。如果設備啟用了軟鍵盤,那么即使在硬鍵盤沒有暴露給用戶時也可以使用這個限定符。如果沒有提供軟鍵盤或者軟鍵盤被禁用,那么只有在硬鍵盤被暴露給用戶時才能夠使用這個限定符。
keyshidden:設備有可用的硬鍵盤,但是被隱藏了,并且設備沒有可用的軟鍵盤。
keyssoft:設備有可用的軟鍵盤,不管它是否可見。
如果提供了keysexposed資源,但沒有keyssoft資源,那么只要系統有可用的軟鍵盤,系統就會使用keysexposed資源而不管鍵盤是否可見。
如果用戶打開了硬鍵盤,就可以在應用程序運行期間改變這個限定。
hardKeyboardHidden和keyboardHidden配置字段分別指明硬鍵盤的可見性以及可見的鍵盤類型(包括軟鍵盤)。
主要文本輸入法nokeys
qwerty
l2key
nokeys:設備沒有用于文本輸入的硬鍵盤;
qwerty:設備有標準的硬鍵盤,不管用戶是否可見;
12key:設備有12個鍵的硬鍵盤,不管用戶是否可見。
keyboard配置字段指明可用的主要文本輸入方法。
導航鍵的有效性navexposed
navhidden
navexposed:導航鍵對用戶可用;
navhidden:導航鍵不可用。
如果用戶能夠看到導航鍵,那么在應用程序運行時就能夠改變這個限定。
navigationHidden配置字段,指示導航鍵是否隱藏。
主要的非觸屏導航方法nonav
dpad
trackball
wheel
nonav:除了使用觸屏以外,設備沒有其他導航設施。
dpad:設備有用于導航的定向板(d-pad)。
trackball:設備有用于導航的軌跡球。
wheel:設備有用于導航的定向滾輪(不常見)。
navigation配置字段指明可用的導航方法類型。
平臺版本(API?級別)例如:
v3
v4
v7
設備支持的API級別。如v1代表API級別1(帶有Android1.0或更高版的設備),v4代表API級別4(帶有Android1.6或更高版本的設備)
警告:Android1.5和1.6只有在限定符跟平臺版本完全匹配時,才能匹配資源

總結

以上是生活随笔為你收集整理的android屏幕适配详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产成人综合在线 | 欧美区日韩区 | 日本韩国毛片 | 阿v天堂网| 日本免费一区视频 | 特一级黄色大片 | 亚洲成年人网 | 麻豆视频免费 | 2025韩国大尺度电影 | 思思久久精品 | 男人天堂综合 | 欧美狠狠干 | 欧美天堂在线观看 | 黄色一级片国产 | 性欧美熟妇videofreesex | 国产精品久久亚洲7777 | 先锋影音av在线 | 一级黄av| 后入内射无码人妻一区 | 操操影视 | wwwxxx黄色| 天天拍夜夜操 | 91蜜桃网站 | 黄色av网站在线观看 | 日韩精品一区二区三区国语自制 | 欧美精品导航 | 久草视频在线免费 | 日日碰狠狠添天天爽无码av | 污污视频网站 | 日韩一本在线 | 91久久网| 午夜成人在线视频 | 色偷偷免费费视频在线 | 精品久久网| 色视频网站 | 色久在线 | 久久精品国产精品亚洲色婷婷 | 国产欧美一区二区精品性色超碰 | 亚洲综合小说网 | 国产午夜一区二区 | 爱情岛亚洲论坛入口 | 精品久久久久久久免费人妻 | 久久久久久免费精品 | 男女裸体无遮挡做爰 | 国产婷婷色综合av蜜臀av | 麻豆日产六区 | 深夜久久久 | 波多野吉衣中文字幕 | 成人一区二区视频 | 欧美一级性生活视频 | 国产婷婷色综合av蜜臀av | 欧美日本韩国一区 | 日韩欧美亚洲一区 | 欧美首页 | av毛片在线播放 | 国产小视频在线观看免费 | 精品人妻天天爽夜夜爽视频 | 日韩涩 | 欧洲久久久久久 | 狠狠干亚洲色图 | 国产精品成人99一区无码 | 国产精品久免费的黄网站 | 亚洲专区免费 | 日本新japanese乱熟 | 国产精品178页 | www.com捏胸挤出奶 | 亚洲深夜视频 | 青青草国内自拍 | 黄色羞羞网站 | 亚洲卡一卡二卡三 | 欧美日韩亚洲成人 | 男女爱爱网站 | 午夜一级视频 | 另类图片亚洲色图 | 精品国产一二三 | 污污视频网站 | 亚洲va在线观看 | 大陆熟妇丰满多毛xxxⅹ | 青青伊人影院 | 深夜福利网址 | 在线视频 日韩 | 免费在线观看网址 | 国产午夜精品一区二区三区视频 | 欧美成人免费在线视频 | 在线观看91视频 | av手机| 国产精品成人免费精品自在线观看 | 2025国产精品 | 国产欧美一区二区三区精品酒店 | 中文字幕巨乳 | 亚洲欧美在线播放 | 国产在线视频你懂的 | 超在线视频| 春物催眠| 日韩精品亚洲精品 | 国产精品成人自拍 | 精品人妻无码一区 | 在线视频观看你懂得 | 久久人人艹 |