淺談Android的屏幕適配問題

昨天就沒有更新文章,在不更新就說不過去了棒动,今天是清明節(jié)的第一天糙申,我沒有出去玩,不過在我心里是這么認為的船惨,心中有風景柜裸,到哪都是旅游。不好意思粱锐,扯遠啦疙挺,收回來。

做過Android項目的人應該都知道怜浅,Android的屏幕適配問題是比較煩人的铐然,因為Android不像IOS那樣,只要那幾個分辨率恶座,反觀Android就不同搀暑,Android手機的屏幕分辨率類別太多。雖然本人也沒有做過幾個Android項目奥裸,但是今天還是想談談Anroid的屏幕適配险掀,當做是一個對自己學習的總結吧,如果有沒有涉及的地方湾宙,還請大家多多指教樟氢。

本人把Android的屏幕適配問題分為5個模塊,分別是圖片適配侠鳄、布局適配埠啃、尺寸適配、權重適配伟恶、代碼適配碴开。

前言

開發(fā)過Android的同學應該都知道,在Android的res目錄下有這樣幾個目錄博秫,分別是drawable-hdpi潦牛、drawable-ldpi、drawable-mdpi挡育、drawable-xdpi巴碗、drawable-xxhdpi。

  • drawable-hdpi:高分辨率
  • drawable-ldpi:低分辨率
  • drawable-mdpi:中等分辨率
  • drawable-xdpi:更高分辨率
  • drawable-xxdpi:最高分辨率

圖片適配

在剛開始學習Android的時候即寒,只知道把圖片直接拷貝都drawable-hdpi目錄下橡淆,一開始的時候只知道這幾個目錄是用來做屏幕適配的,現(xiàn)在終于了解到了母赵,現(xiàn)在我來模擬一個場景讓大家了解什么是圖片適配逸爵。但是這種適配我們一般用的比較少。

假設一個場景凹嘲,如果一張圖片顯示在低分辨率的手機上剛好师倔,但是如果它顯示到特別高的分辨率手機上的時候,你會感覺它比較小周蹭,這個時候溯革,我們就可以讓我們的美工美眉切幾張不同大小的圖片,并它他們放到相對應的目錄下谷醉,當系統(tǒng)在加載的時候致稀,會根據(jù)手機的分辨率對應的目錄下查找需要的圖片。

布局適配

首先說一下俱尼,這個也不是很常用抖单。假設我們要專門適配480x800的屏幕,這里的數(shù)值指的都是像素遇八,可以新建一個在src/目錄下新建一個layout-800x480 目錄矛绘,然后把響應的布局拷到這個目錄下,即可刃永,說一下一個應用場景货矮。

假設我們在320x480的屏幕上顯示一個TextView,但是我們卻想讓屏幕為480x800的手機在相同的位置上顯示一個Button斯够,我們就可以這樣弄囚玫。

尺寸適配

首先說一個喧锦,這個非常常用,首先我們來了解一下dp和px(像素)的關系抓督。dp = px/設備密度 燃少,那么我們在代碼中如何獲取設備的密度。使用如下代碼即可

float density = getResources().getDisplayMetrics().density;
System.out.println("設備密度:" + density);

那么接下來我們說說設備密度值是以什么為參考的铃在,答案是一320x480的設備密度值為1阵具,那么320x240就是0.75,480x800是1.5,1280x720是2。
那么我們要怎么適配呢定铜?我們也模擬一個場景阳液。

假設我們要在屏幕上顯示一個寬度為屏幕寬度一般的TextView,怎么看出來它占一半呢揣炕?我們可以給這個TextView加一個背景帘皿。如果是在320x480的手機上,我們寫的160dp和160px效果是相同的祝沸,但是其他分辨率的手機矮烹,我們絕對不能使用px。假設我們寫對了罩锐,我們寫的是160dp奉狈,那么在480x800下效果也是正常的,我來舉一個不正常的例子涩惑,我的手機的魅族的手機仁期,屏幕分辨率是1800X1080,但是我的手機的設備密度值為2.5竭恬。如果要達到相同的效果跛蛋,我寫的應該是216dp。怎么算出來的呢痊硕?1080是我手機的寬度赊级,這個是像素哦。那么根據(jù)公式岔绸,dp = 1080 / 2 /2.5 ==>dp = 216dp理逊。如果我們使用的還是160dp,那么我的手機就顯示一小半盒揉,但是如果改成了216dp晋被,那么在低分辨率的手機上又顯示錯誤了,這個時候我們應該怎么辦呢刚盈?我們可以這樣做羡洛,在dimens.xml中定義一個<dimen name="textViewWidth">160dp</dimen>。在/res目錄下藕漱,新建一個values-1800x1080目錄欲侮,把values目錄下的dimens.xml復制過去崭闲,然后我們把它改成216dp,這樣就完成了適配锈麸,但是布局文件中我們應該要使用textViewWidth這個尺寸镀脂。

權重適配

android:weightSum="3"

這句代碼可以定義這個控件的權重值牺蹄,那么在子控件中只能分配權重為3忘伞。這樣我們就可以實現(xiàn)兩個TextView各占1/3的效果了。

代碼適配

通常我們在寫代碼的時候沙兰,不能把尺寸的像素尺寸寫死氓奈,因為我們要考慮到一個屏幕適配的問題,模擬一個場景鼎天。

假設我們在項目使用到了SlidingMenu的開源側滑菜單舀奶,我們要給側滑菜單的寬度設置為屏幕的1/3,其中有一個方法是設置菜單的寬度斋射,在這里我們就不能給寫死了育勺,因為我們寫死的值是像素值,它不是dp值罗岖,那么我們要做的事就是根據(jù)屏幕分辨率來獲取到屏幕的1/3是多少個dp值涧至,然后根據(jù)dp值和設備密度值來計算像素值,這樣才可以設置像素值桑包。下面是一個工具類南蓬,用于dp和px的轉換。

public class DensityUtil {  

/** 
 * 根據(jù)手機的分辨率從 dip 的單位 轉成為 px(像素) 
 */  
public static int dip2px(Context context, float dpValue) {  
    final float scale = context.getResources().getDisplayMetrics().density;  
    return (int) (dpValue * scale + 0.5f);  
}  

/** 
 * 根據(jù)手機的分辨率從 px(像素) 的單位 轉成為 dp 
 */  
public static int px2dip(Context context, float pxValue) {  
    final float scale = context.getResources().getDisplayMetrics().density;  
    return (int) (pxValue / scale + 0.5f);  
}  

}

累死了哑了,我要睡了赘方!

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市弱左,隨后出現(xiàn)的幾起案子窄陡,更是在濱河造成了極大的恐慌,老刑警劉巖拆火,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跳夭,死亡現(xiàn)場離奇詭異,居然都是意外死亡榜掌,警方通過查閱死者的電腦和手機优妙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憎账,“玉大人套硼,你說我怎么就攤上這事“澹” “怎么了邪意?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵九妈,是天一觀的道長。 經(jīng)常有香客問我雾鬼,道長萌朱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任策菜,我火速辦了婚禮晶疼,結果婚禮上,老公的妹妹穿的比我還像新娘又憨。我一直安慰自己翠霍,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布蠢莺。 她就那樣靜靜地躺著寒匙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪躏将。 梳的紋絲不亂的頭發(fā)上锄弱,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機與錄音祸憋,去河邊找鬼会宪。 笑死,一個胖子當著我的面吹牛夺衍,可吹牛的內(nèi)容都是我干的狈谊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼沟沙,長吁一口氣:“原來是場噩夢啊……” “哼河劝!你這毒婦竟也來了?” 一聲冷哼從身側響起矛紫,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤赎瞎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后颊咬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體务甥,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年喳篇,在試婚紗的時候發(fā)現(xiàn)自己被綠了敞临。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡麸澜,死狀恐怖挺尿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤编矾,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布熟史,位于F島的核電站,受9級特大地震影響窄俏,放射性物質(zhì)發(fā)生泄漏蹂匹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一凹蜈、第九天 我趴在偏房一處隱蔽的房頂上張望限寞。 院中可真熱鬧,春花似錦踪区、人聲如沸昆烁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至白粉,卻和暖如春传泊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸭巴。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工眷细, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鹃祖。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓溪椎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親恬口。 傳聞我的和親對象是個殘疾皇子校读,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容