一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - 詳解Android應用中屏幕尺寸的獲取及dp和px值的轉換

詳解Android應用中屏幕尺寸的獲取及dp和px值的轉換

2021-06-30 16:12chenlijian Android

這篇文章主要介紹了Android應用中屏幕尺寸的獲取及dp和px值的轉換方法,這里主要介紹將dp轉化為px值的例子,需要的朋友可以參考下

獲取屏幕尺寸

通過windowmanager獲取

?
1
2
3
4
5
6
7
displaymetrics dm = new displaymetrics();
 
getwindowmanager().getdefaultdisplay().getmetrics(dm);
 
//其中display = getwindowmanager().getdefaultdisplay() 獲得了一個defaultdisplay對象; 然后 display.getmetrics(dm) 把屏幕尺寸信息賦值給displaymetrics dm
 
//注意:windowmanager有時候需要通過context。getsystemservice獲取:windowmanager wm = (windowmanager) context.getsystemservice(context.window_service);

displaymetrics和display的關系。;

display指代顯示區域這個對象,它可能是真實的物理屏幕,也可能僅指應用程序的顯示區域,比如在非全屏activity里,系統因為有狀態欄,因此顯示區域要比物理屏幕要小。displaymetrics里封裝了顯示區域的各種屬性值。查看源碼發現,在displaymetrics對各個屬性值的注釋都說明為真實的物理尺寸。而且也發現display.getmetrics(dm)這一函數基本在應用在獲取真實屏幕尺寸的時候。記住這一點即好。

注:構造函數displaymetrics不需要傳遞任何參數;調用getwindowmanager()之后,會取得現有activity的handle。然后,diplay將取得的寬高維度存放于displaymetrics對象中,而取得的寬高維度是以像素為單位(pixel),“像素”所指的是“絕對像素”而非“相對像素”。

通過displaymetrics對象dm可以獲得如下信息

?
1
2
3
4
5
6
7
8
9
10
11
width = dm.widthpixels;
 
height = dm.heightpixels;
 
xdpi = dm.xdpi;
 
ydpi = dm.ydpi;
 
density = dm.densitydpi;
 
fdensity = dm.density;

 

將dp和px轉化成對應的px數值的實例:

?
1
2
3
4
5
int padding =4
 
padding = (int) typedvalue.applydimension(typedvalue.complex_unit_dip, 4,
 
context.getresources().getdisplaymetrics());

解釋:
padding的單位是:dip, padding的大小是:4

雖然是4dip,但是,不是最終padding的真實單位。

他是通過計算以后,4dp和密度系數相乘得到的一個值,實際上計算出來的padding單位是像素,也就是它的寬度。在不同dpi的屏幕上,這個值是不一樣的。

即:將dp轉化為px,返回的是一個dp對應的px數值。

如果這里是complex_unix_sp,就是講sp轉化為dp。

單位間的轉換就用這個方法,可以將其封裝成一個工具方法。

進一步理解:
applydimension方法是將4像素轉換為6dp(480x800)、4dp(320x800)、3dp(240x320), 所以返回的值對應不同的分辨率(通過getdisplaymetrics就得到了)就是6、4、3

源代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public static float applydimension(int unit, float value,
 
displaymetrics metrics)
 
{
 
switch (unit) {
 
case complex_unit_px:
 
return value;
 
case complex_unit_dip:
 
return value * metrics.density;
 
case complex_unit_sp:
 
return value * metrics.scaleddensity;
 
case complex_unit_pt:
 
return value * metrics.xdpi * (1.0f/72);
 
case complex_unit_in:
 
return value * metrics.xdpi;
 
case complex_unit_mm:
 
return value * metrics.xdpi * (1.0f/25.4f);
 
}
 
return 0;
 
}

 

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久综合狠狠综合狠狠 | 亚洲免费精品视频 | 婷色| 婷婷日日夜夜 | 日韩在线视频免费观看 | 国产私人影院 | 国产视频一区在线观看 | 久久精品久久久 | 国产精品最新资源网 | 久久黄色录像 | 国产免费小视频在线观看 | 美女脱一光二净的视频 | 咪咪爱小说 | 精品美女国产互换人妻 | 91精品91 | 热久久免费视频 | 草草视频在线免费观看 | 国产一卡2卡3卡4卡公司科普 | 亚洲成在人网站天堂一区二区 | 日本一道本中文字幕 | 大妹子最新视频在线观看 | 精品日韩一区二区三区 | 88av免费观看 | 日本免费精品视频 | 久99久热只有精品国产99 | 国产91素人搭讪系列天堂 | tube99大学生 | 波多野结衣178部中文字幕 | 日本一区二区三区在线 观看网站 | 色琪琪久久草在线视频 | 久久久久久久久人体 | 欧美伊人久久久久久久久影院 | 成人欧美一区在线视频在线观看 | 好男人好资源在线观看免费 | 亚洲精品97福利在线 | 热久久天天拍天天拍热久久2018 | 日韩视频免费 | 色批网站www | 国产精品成人麻豆专区 | 男人把大ji巴放进男人免费视频 | 国产午夜永久福利视频在线观看 |