Android學習-- 螢幕適配

來源:互聯網
上載者:User

標籤:英文單詞   android   

  對於從事android應用開發的朋友來說都應該知道,現在的安卓手機的螢幕類型十分繁多, 大小尺寸,長寬比例都不盡相同,同一個介面在不同解析度的手機上可能出現布局錯亂,控制項跑位的現象。做螢幕的適配不可能實現在每種螢幕上顯示出的介面 效果完全一致。只能靠平時的編程習慣和經驗是的介面在不同的螢幕尺寸在不會出現過分的走位,在可遇見範圍內控制介面在不同螢幕下的變化,並做出相應調 整。那麼偶們應該如何做到螢幕的適配呢?下面我就以我的開發經驗來說說吧。

1、盡量使用線性布局(LinearLayout)和相對布局(RelativeLayout),不要使用絕對布局。

2、盡量使用dip和sp,不要使用px。

3、為不同的解析度提供不同的布局檔案和圖片。

4、在AndroidMainfest.xml中設定多解析度支援。

5.如果需要在特定解析度下適配,可以在res目錄上建立layout-HxW.xml的檔案夾。比如要適配1080*1800的螢幕(魅族MX3採用此解析度)則建立layout-1800x1080.xml的檔案夾,然後在下面定義布局。Android系統會優先尋找解析度相同的布局,如果不存在則換使用預設的layout下的布局。

Android螢幕適配必須要理解的一些概念:

  • px

是英文單詞pixel的縮寫,意為像素,螢幕上的點。我們通常所說的解析度如480X800就是指的像素。

在設計領域中,像素是用來計算數位影像的最小單位。電腦中顯示的映像並非連續的線條組成,而是由許多肉眼看不見的小點組成。如果把影像放大數倍,會發現這些連續色調其實是由許多色彩相近的小點所組成,這些小點就是構成影像的最小單位“像素”。

  • in

表示英寸,是螢幕的物理尺寸。每英寸等於2.54厘米。例如我們經常說的手機螢幕大小有,5(英)寸、4(英)寸就是指這個單位。這些尺寸是螢幕的對角線長度。如果手機的螢幕是4英寸,表示手機的螢幕(可視地區)對角線長度是4 X 2.54 = 10.16厘米。

  • dpi

dpi是Dots Per Inch的縮寫, DPI,即每英寸包含像素個數。比如320X480解析度的手機,寬2英寸,高3英寸, 每英寸包含的像素點的數量為320/2=160dpi(橫向)或480/3=160dpi(縱向),160就是這部手機的dpi,橫向和縱向的這個值都是相同的,原因是大部分手機螢幕使用正方形的像素點。

  • density

螢幕密度,density和dpi的關係為 density = dpi/160

  • dp

也即dip,裝置獨立像素,device independent pixels的縮寫,Android特有的單位,在螢幕密度dpi = 160螢幕上,1dp = 1px。

  • sp

和dp很類似,一般用來設定字型大小,和dp的區別是它可以根據使用者的字型大小偏好來縮放。


layout_weight屬性

這個屬性其實很好用,一般和android:layout_height="fill_parent"或 android:layout_width="fill_parent"一起使用,它用於描述該子項目在剩餘空間中佔有的大小比例。加入一行只有一個文本 框,那麼它的預設值就為0,如果一行中有兩個等長的文字框,那麼他們的android:layout_weight值可以是同為1。如果一行中有兩個不等 長的文字框,那麼他們的android:layout_weight值分別為1和2,那麼第一個文字框將佔據剩餘空間的三分之二,第二個文字框將佔據剩餘 空間中的三分之一。android:layout_weight遵循數值越小,重要度越高的原則。android螢幕如此繁多,不可能都是等比例縮放的, 所以單純使用dip來設定控制項也是行不通,與layout_weight屬性靈活結合使用,增強介面的適應性。 

drawable資源

首先:你需要在AndroidManifest.xml檔案的元素如下添加子項目 

 

<supports-screens android:anyDensity="true"  android:largeScreens="true"  android:normalScreens="true"  android:smallScreens="true"  android:xlargeScreens="true" />

名如其意,以上是為我們的螢幕設定多解析度支援(更準確的說是適配大、中、小三種密度)。android:anyDensity="true" ,這一句對 整個的螢幕都起著十分重要的作用,值為true,我們的應用程式當安裝在不同密度的手機上時,程式會分別載入hdpi,mdpi,ldpi檔案夾中的資 源。相反,如果值設定為false,即使我們在hdpi,mdpi,ldpi檔案夾下擁有同一種資源,那麼應用也不會自動地去相應檔案夾下尋找資源,這種 情況都是出現在高密度,以及低密度的手機上,比如說一部240×320像素的手機,如果設定 android:anyDensity="false",Android系統會將240 x 320(低密度)轉換為 320×480(中密度),這樣的 話,應用就會在小密度手機上載入mdpi檔案中的資源。
細心的人會發現自 android2.0開始之後drawable檔案被三個檔案夾drawable-hdpi,drawable-mdpi,drawable-ldpi三 個檔案夾所取代,有些編程人員為了讓應用程式預設地載入某些圖片,他們會特意地去在android2.0之後的應用程式中重新建立drawable檔案 夾,其實這樣做完全沒有必要,通過第一段的分析我們得知,android:anyDensity="false",則應用會將大小密度轉變成中密度,從而 去載入mdpi中的資源。這裡同樣,當android:anyDensity="false",則應用會去載入mdpi中的資源。 

總結一下:

第一:android:anyDensity="true",系統會依據螢幕密度,自動去找對應的檔案夾

第二:android:anyDensity="false",

(1)如果drawable-hdpi,drawable-mdpi,drawable-ldpi三個檔案夾中有同一張圖片資源的不同密度表示,那麼系統會去載入

drawable_mdpi檔案夾中的資源

(2)如果drawable-hpdi中有高密度圖片,其它兩個檔案夾中沒有對應圖片資源,那麼系統會去載入drawable-hdpi中的資源。

(3)如果drawable-hdpi,drawable-mdpi中有圖片資源,drawable-ldpi中沒有對應的圖片資源,那麼系統會載入drawable-mdpi檔案夾中的資源 

注意各種檔案夾的不同表示。

drawable-hdpi 該圖片即適用於橫屏,也適用於豎屏

drawable-land-hdpi,當螢幕為橫屏,且為高密度時,載入此檔案夾中的資源

drawable-port-hdpi,當螢幕為豎屏,且為高密度時,載入此檔案夾中的資源 

draw9patch工具

android SDK 包的tools目錄下為偶們提供了這麼一個圖片處理工具。有時候偶們需要圖片資源自適應且不失真,無論橫屏還是豎屏,高解析度還是低解析度,都能自動填滿 滿,而且不失真等等背景問題。 Android針對這種情況,專門製作了一種.9.PNG格式來解決這個問題。draw9patch就是協助偶們制 作.9.PNG格式資源的一個小工具。
*.9.PNG就標準的PNG格式,只是在最外面一 圈額外增加1px的邊框,這個1px的邊框就是用來定義圖片中可擴充的和靜態不變的地區。特別說明,left(左)和top(上)邊框中交叉部分是可展開 部分,未選中部分是靜態地區部分。right和bottom(下和右)邊框中交叉部分則是內容部分。

650) this.width=650;" class="fit-image" width="244" height="199" border="0" title="clip_image009" alt="clip_image009" src="http://s3.51cto.com/wyfs01/M01/0A/1E/wKioJlGcLAazFxmqAAAeiYBQi6g732.jpg" style="border:0px none;padding-left:0px;padding-right:0px;padding-top:0px;background-image:none;" />

如《也就是說,在手機裡。無論上面那張圖怎麼放大,四周的圓角都是不會被放大的!只有left(左)和top(上)邊框內才會伸縮!
在 Android中以9.PNG格式的圖片未背景,則能夠自訂展開而不失真,比如系統的Button就是一個典型的例子。其實呢,無論是left和 top,還是right和bottom都是把圖片分成9塊 (邊角四塊是不能縮放的,其他的四塊則是允許縮放的),所以叫做9.PNG。
關於draw9patch工具的使用在此不做闡述,需要的可以自己去百度一下。  

Layout資源

有時候可能由於螢幕布局過於複雜,同一個布局檔案很難適應所有的螢幕解析度。可以像drawable資源一樣,在工程的res檔案夾下建立多個相應的layout檔案夾,為相應解析度的螢幕編寫相應的layout檔案。 

檔案夾的命名規範是這樣的:layout-解析度
例如:layout-320x240 , layout-480x320等等。
系統就會根據運行環境的解析度優先載入相應的檔案夾下的layout布局檔案。 


Android學習-- 螢幕適配

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.