『壹』 android 屏幕適配ui設置px怎麼轉換成dp
/**
* 根據手機的解析度從 dp 的單位 轉成為 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根據手機的解析度從 px(像素) 的單位 轉成為 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
『貳』 圖解android開發中dp和px的區別
dp也就是dip。這個和sp基本類似。如果設置表示長度、高度等屬性時可以使用dp或sp。但如果設置字體,需要使用sp。dp是與密度無關,sp除了與密度無關外,還與scale無關。如果屏幕密度為160,這時dp和sp和px是一樣的。1dp=1sp=1px,但如果使用px作單位,如果屏幕大小不變(假設還是3.2寸),而屏幕密度變成了320。那麼原來TextView的寬度設成160px,在密度為320的3.2寸屏幕里看要比在密度為160的3.2寸屏幕上看短了一半。但如果設置成160dp或160sp的話。系統會自動將width屬性值設置成320px的。也就是160 * 320 / 160。其中320 / 160可稱為密度比例因子。也就是說,如果使用dp和sp,系統會根據屏幕密度的變化自動進行轉換.
『叄』 android px/2是dp嗎
/**
* dp2px
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* px2dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
/**
*根據設備信息獲取當前解析度下指定單位對應的像素大小;
* px,dip,sp -> px
*/
public float getRawSize(Context c, int unit, float size) {
Resources r;
if (c == null){
r = Resources.getSystem();
}else{
r = c.getResources();
}
return TypedValue.applyDimension(unit, size, r.getDisplayMetrics());
}
『肆』 android控制項的高度和寬頻的單位sp px dp之間是怎樣轉換的
public static float dp2Px(Activity mContext, float dps) { DisplayMetrics metrics = new DisplayMetrics(); float density = metrics.density; Log.i("dp2Pix", "" + density); mContext.getWindowManager().getDefaultDisplay().getMetrics(metrics); density = metrics.density; Log.i("dp2Pix", "" + density); float pixels = dps * density; return pixels; }你可以看看DisplayMetrics 的api的使用,網上好多人寫的什麼/** * 根據手機的解析度從 dp 的單位 轉成為 px(像素) */public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f);}簡直狗屁不通,我在機器上測試了,14dp在480*800的機器上面前面的方法是得到的是21,後面一個方法的得到的是14,你們自己覺得那個正確呢,你們也可以自己測試下,看是否正確 查看原帖>>
『伍』 dp和px之間的換算公式
在Android開發中,尺寸換算可以說既簡單又復雜,而且還比較碎,特別是屏幕適配的時候肯定會用到他們。今天就來總結一下他們三者的關系,首先說下他們都是什麼。
px:像素單位。最基礎的圖像構成元素單位
dp:與密度無關的像素,這是一個基於屏幕物理密度的抽象單位。
這里要解釋一下密度的概念,密度(dpi):每英寸包含的像素個數(單位是dpi),1dp實際上相當於密度為160dpi的屏上的一個點。可否理解為物理尺寸?也就是說,如果屏幕物理密度是160dpi時,dp和px是等效的。
換算公式 1: px = dp * (dpi / 160)
sp:同dp相似,但還會根據用戶的字體大小偏好來縮放(建議使用sp作為文本的單位,其它用dip)
咱們廢話不多說,直接上表格,通過這個表格你會非常快速的定位到你要找的內容。
寬×高(標准值) 240×320 320×480 480x800 720x1280 1080x1920 1440×2560
DPI等級 LDPI MDPI HDPI XHDPI XXHDPI XXXHDPI
DPI數值 (density) 120 160 240 320 480 640
對應比例 3 4 6 8 12 16
1DP=?PX 0.75 1 1.5 2 3 4
註:density值表示每英寸有多少個顯示點,與解析度是兩個概念。
MDPI為baseline,其他均以此為基準,在此設備上,1dp = 1px
下面附上開發中用到的dp和px相互轉換的工具類。sp和dp在開發中是同等對待的,只是sp是用來對文字的大小的。其他的全用dp就好。
import android.content.Context;
public class DensityUtil {
/**
* 根據手機的解析度從 dp 的單位 轉成為 px(像素)
*/
* 根據手機的解析度從 px(像素) 的單位 轉成為 dp
*/
這個工具類在網上一大推,而且基本都一樣,加0.5f是有個偏移值,確保精度不流失。scale是在這個類DisplayMetrics中定義的全局變數,其實這個值就是當前手機的density/160
『陸』 Android中dp和px之間如何進行轉換
1、px :是屏幕的像素點
2、dp :一個基於density的抽象單位,如果一個160dpi的屏幕,1dp=1pxdip
3、轉換方式如下
public class DensityUtil {
/**
* 根據手機的解析度從 dp 的單位 轉成為 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根據手機的解析度從 px(像素) 的單位 轉成為 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}
『柒』 android 將dp轉換px時後面為什麼加 0.5f
要四捨五入
『捌』 Android的px,dp和sp等單位的區別詳解
px:
即像素,1px代表屏幕上一個物理的像素點;
px單位不被建議使用,因為同樣100px的圖片,在不同手機上顯示的實際大小可能不同
dp:
這個是最常用但也最難理解的尺寸單位。它與「像素密度」密切相關,所以首先我們解釋一下什麼是像素密度。假設有一部手機,屏幕的物理尺寸為1.5英寸x2英寸,屏幕解析度為240x320,則我們可以計算出在這部手機的屏幕上,每英寸包含的像素點的數量為240/1.5=160dpi(橫向)或320/2=160dpi(縱向),160dpi就是這部手機的像素密度,像素密度的單位dpi是Dots Per Inch的縮寫,即每英寸像素數量。橫向和縱向的這個值都是相同的,原因是大部分手機屏幕使用正方形的像素點。
不同的手機/平板可能具有不同的像素密度,例如同為4寸手機,有480x320解析度的也有800x480解析度的,前者的像素密度就比較低。
Android系統定義了四種像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它們對應的dp到px的系數分別為0.75、1、1.5和2,這個系數乘以dp長度就是像素數。
例如界面上有一個長度為「100dp」的圖片,那麼它在240dpi的手機上實際顯示為80x1.5=120px,在320dpi的手機上實際顯示為80x2=160px。如果你拿這兩部手機放在一起對比,會發現這個圖片的物理尺寸「差不多」,這就是使用dp作為單位的效果。
dip:
與dp完全相同,只是名字不同而已。在早期的Android版本里多使用dip,後來為了與sp統一就建議使用dp這個名字了。
sp:
與縮放無關的抽象像素(Scale-independent Pixel)。sp和dp很類似但唯一的區別是,Android系統允許用戶自定義文字尺寸大小(小、正常、大、超大等等),當文字尺寸是「正常」時1sp=1dp=0.00625英寸,而當文字尺寸是「大」或「超大」時,1sp>1dp=0.00625英寸。類似我們在windows里調整字體尺寸以後的效果——窗口大小不變,只有文字大小改變。
還有幾個比較少用到的尺寸單位:
mm:
即毫米;
in:
即英寸,1英寸=2.54厘米(約);
pt:
1pt=1/72英寸=0.035厘米;
最佳實踐,文字的尺寸一律用sp單位,非文字的尺寸一律使用dp單位。例如textSize="16sp"、layout_width="60dp";偶爾需要使用px單位,例如需要在屏幕上畫一條細的分隔線時:
<View layout_width="match_parent" layout_height="1px"/>
補充:
1. android.view.ViewGroup.LayoutParams.height及width這兩個屬性的單位為像素,但是為了兼容多種解析度的手機,我們需要最好使用dp。
2. 根據手機的解析度從dp的單位轉成px
public static int dip2px(Context context, float dpValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(dpValue*scale + 0.5f);
}
3.根據手機的解析度從px轉成dp
public static int px2dip(Context context, float pxValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(pxValue/scale + 0.5f);
}
『玖』 android安卓系統dp/sp/px換算表比率 ratexxxhdpi是多少
首先要明確兩點,什麼是dpi?什麼是dp?
dpi = dots per inch(每個inch上有多少個點)
160dpi的屏幕,1dp = 1px,也就意味著1dp = 1/160 inch。
所以每內個inch上的點容數越多(點的密度越大),每個dp對應的px也就越大
dp/sp可以認為是相同的,不過sp通常用於設置字體大小,而dp用於尺寸。
dp/sp與px換算,是和設備的density相關的,dp * density (密度)= px。
float density = Resources.getSystem().getDisplayMetrics().density;
所謂的xhdpi,其dpi並不是某一固定取值,只要在240~320dpi范圍內的都認為是xhdpi(mdpi/hdpi/xhdpi/xxhdpi類似)。
所以同樣是xhdpi的手機,dp和px的轉換也是不同的。
『拾』 安卓系統中dp,px,pt,sp 的區別 以及dp 和 px 互轉
dip: device independent pixels(設備獨立像素). 一般我們為了支持多種解析度如WVGA、HVGA和QVGA 推薦使用這個,不依賴像素。內
dp: dip是一樣的,谷歌官方容推薦使用這個
px: pixels(像素). 不同設備顯示效果相同,一般我們HVGA代表320x480像素,這個用的比較少。
pt: point,是一個標準的長度單位,1pt=1/72英寸,用於印刷業,非常簡單易用;
sp: scaled pixels(放大像素). 主要用於字體顯示best for textsize。