這裏是本人第一篇小文,目的主要在於記錄自己在Android學習過程中的點滴,俗話說好記性不如爛筆頭,記上一筆,也當是成果的記錄,別搞到後來同樣的問題還要去查詢。
廢話不說,進入正文。
1. 爲什麼會有這個問題的出現
相信各位Android開發愛好者都知道,由於OEM(設備製造商)之間的競爭,各種Android操作系統的手機和平板電腦型號各異,屏幕分辨率的差異可想而知。爲了能夠讓我們辛苦寫出的程序可以在不同的機型上漂亮健康的跑起來,讓UI適應不同分辨率的屏幕,也自然成爲了愛好者們爲之頭痛的問題。
2. Android系統爲我們提供了什麼途徑
(1)android支持density的版本
Android從1.6版本開始支持density(對應API Level 4)
(2)density
density值表示每英寸有多少個顯示點,它的單位是dpi:dot per inch,通常屏幕大時,density就大,屏幕小時,density就小。
(3)hdpi、mdpi、ldpi
在之前的版本中,只有一個drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三個,這三個主要是爲了支持多density。
drawable- hdpi、drawable- mdpi、drawable-ldpi的區別:
(1)drawable-hdpi裏面存放高分辨率的圖片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi裏面存放中等分辨率的圖片,如HVGA
(320x480)
(3)drawable-ldpi裏面存放低分辨率的圖片,如QVGA
(240x320)
在不同的文件夾下所放的圖片像素大小也不相同,按hdpi:mdpi:ldpi
= 6:4:3來切圖處理。也可以按照三個文件夾默認的ic_launcher的圖標比例來處理。
(4)不同的layout
在res目錄下創建不同的layout文件夾,比如layout-640x360,layout-800x480,所有的layout文件在編譯之後都會寫入R.Java裏,而系統會根據屏幕的大小自己選擇合適的layout進行使用。
3. 我們自己該怎麼處理
(1)關於佈局
在layout的xml文件中,編寫的時候不建議過多的使用padding屬性,因爲這樣的佈局永遠是無法適應所有手機屏幕的。正確的做法是建議使用weight屬性。
過程很簡單:首先,將你控件的layout中的width、height設置爲fill-parent,不要使用wrap——content。因爲wrap-content的大小是不固定的。而weight(權重)這個屬性很好的解決了這個問題。
當包裹在控件外面的Layout的width、height屬性都設置爲fill-parent時,可以利用weight的反比特性。即如果控件A設置weight爲9,控件B設置weight爲20,那麼A所佔的空間爲20/(9+20),B所佔的空間爲9/(9+20)。這樣的反比屬性對任何分辨率下的手機都是合適的。
(2)關於字體
在你的res文件夾中創建一個文件夾,叫做values-800x480。在該文件夾下創建一個dimens.xml文件,定義各種字體的大小。那麼系統就會自動根據你手機屏幕的分辨率去調用響應的文件夾。
另外,值得提醒的是,記得在你默認的values文件下的dimens.xml文件中也要寫上相應的字體大小哦,因爲當系統無法認識你手機屏幕大小的時候,它會自動去找你默認文件中的東西,沒有寫的話程序會崩潰。