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

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

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

服務器之家 - 編程語言 - Android - Android的單位以及屏幕分辨率詳解

Android的單位以及屏幕分辨率詳解

2021-02-03 12:51Android開發網 Android

Android的單位以及屏幕分辨率詳解,需要的朋友可以參考下

一、常用的單位:相對單位主要有:px、sp、dp
絕對單位主要有:pt、in、mm

二、單位應用總結:一般用相對單位,而不是絕對單位
1、字體的大小一般使用SP,用此單位的字體能夠根據用戶設置字體的大小而自動縮放

2、空間等相對距離一般使用dp(dip),隨著密度變化,對應的像素數量也變化,但并沒有直接的相對比例的變化。

3、px與實際像素有關,及與密度有關!dp和sp和實際像素沒有關系,對于一定分辨率但不同密度的屏幕,px單位的應用可能會導致長度的相對比例的變化。

三、密度與分辨率:
密度值表示每英寸有多少個顯示點,與分辨率是兩個概念。

其屏幕密度標準是:HVGA屏density=160;QVGA屏density=120;WVGA屏density=240;WQVGA屏density=120

具體的應用運算關系:假設分辨率是 x*y, 密度為 d, 屏幕實際大小為 a*b那么關系為 x*y = d * a * b (約等于)

不同density下屏幕分辨率信息,以480dip*800dip的 WVGA(density=240)為例density=120時 屏幕實際分辨率為240px*400px (兩個點對應一個分辨率)

四、對比總結:
1、在相同密度(即同一實體屏幕)不同分辨率的情況下,與實體密度無關的相對單位sp和dp顯示正常

2、在相同分辨率不同密度的情況下,因為一般情況下,都用的標準密度,所以分析的意義不是很大

其他資料:
px:是屏幕的像素點
in:英寸
mm:毫米
pt:磅,1/72 英寸
dp:一個基于density的抽象單位,如果一個160dpi的屏幕,1dp=1px
dip:等同于dp
sp:同dp相似,但還會根據用戶的字體大小偏好來縮放。
建議使用sp作為文本的單位,其它用dip
針對dip和px 的關系,做以下概述:
HVGA屏density=160;QVGA屏density=120;WVGA屏density=240;WQVGA屏density=120
density值表示每英寸有多少個顯示點,與分辨率是兩個概念。
不同density下屏幕分辨率信息,以480dip*800dip的 WVGA(density=240)為例

density=120時 屏幕實際分辨率為240px*400px (兩個點對應一個分辨率)
狀態欄和標題欄高各19px或者25dip
橫屏是屏幕寬度400px 或者800dip,工作區域高度211px或者480dip
豎屏時屏幕寬度240px或者480dip,工作區域高度381px或者775dip

density=160時 屏幕實際分辨率為320px*533px (3個點對應兩個分辨率)
狀態欄和標題欄高個25px或者25dip
橫屏是屏幕寬度533px 或者800dip,工作區域高度295px或者480dip
豎屏時屏幕寬度320px或者480dip,工作區域高度508px或者775dip

density=240時 屏幕實際分辨率為480px*800px (一個點對于一個分辨率)
狀態欄和標題欄高個38px或者25dip
橫屏是屏幕寬度800px 或者800dip,工作區域高度442px或者480dip
豎屏時屏幕寬度480px或者480dip,工作區域高度762px或者775dip

apk的資源包中,當屏幕density=240時使用hdpi 標簽的資源
當屏幕density=160時,使用mdpi標簽的資源
當屏幕density=120時,使用ldpi標簽的資源。
不加任何標簽的資源是各種分辨率情況下共用的。
布局時盡量使用單位dip,少使用px

下面是幾種不同單位的相互轉換.

復制代碼 代碼如下:

public static int dip2px(Context context, float dipValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(dipValue * scale + 0.5f);
}
public static int px2dip(Context context, float pxValue){
final float scale = context.getResource().getDisplayMetrics().density;
return (int)(pxValue / scale + 0.5f);
}
public static int dip2px(Context context, float dipValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(dipValue * scale + 0.5f);
}
public static int px2dip(Context context, float pxValue){
final float scale = context.getResource().getDisplayMetrics().density;
return (int)(pxValue / scale + 0.5f);
}


下面說下如何獲取分辨率:

 

在一個Activity的onCreate方法中,寫入如下代碼:

復制代碼 代碼如下:

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)


這還是挺簡單的, 可是你有沒有在800*480的機器上試過, 是不是得到的寬度是533 ? 因為android剛開始時默認的density是1.0 , 此時你可以再manifest.xml中加入

 

1.uses-sdk節點, <uses-sdk android:minSdkVersion="4" /> , 表示不sdk1.6以下的機器不能安裝你的apk了.

2.supports-screens 節點.

復制代碼 代碼如下:

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: caoporn草棚在线视频 | 天天做日日做天天添天天欢公交车 | 国产福利微拍精品一区二区 | 亚洲国产无线码在线观看 | b站免费| 天天做天天爰夜夜爽 | 青春娱乐国产分类精品二 | 国产成人亚洲精品91专区高清 | 毛片免费毛片一级jjj毛片 | 亚洲黄色三级视频 | 亚洲h片 | 喘息揉弄1v1h老师 | 91sao在线看片水片 | 9191精品国产观看 | 青青草综合网 | coolgay男男gayxxx| 玩两个少妇女邻居 | 亚洲小视频在线 | 玩乳h文奶水和尚 | 欧美贵妇videos办公室360 | 视频在线免费看 | 99久久国产综合精品女小说 | 免费一级毛片在线播放放视频 | 亚洲第一福利视频 | 吉泽明步高清无码中文 | 四虎成人www国产精品 | 亚洲swag精品自拍一区 | 1024视频色版在线网站 | 青青草成人在线观看 | 亚洲 日韩 国产 制服 在线 | 日本高清免费不卡在线 | 色老板视频在线观看 | 日韩一级免费毛片 | 久久精品中文騷妇女内射 | 四虎影院免费在线 | 五月婷婷丁香色 | 87影院在线观看视频在线观看 | 特黄a大片免费视频 | 免费岛国| 日本春菜花在线中文字幕 | 经典欧美gifxxoo动态图暗网 |