px (pixels)像素 – 是像素,就是屏幕上实际的像素点单位。
dip或dp (device independent pixels)设备独立像素, 与设备屏幕有关。
dpi(dot per inch):屏幕像素密度,每英寸多少像素
代码中 获取屏幕的宽高:代码如下所示:
DisplayMetrics mDisplayMetrics = getResources().getDisplayMetrics();
//高的像素
int heigthPx = mDisplayMetrics.heightPixels;
//宽的像素
int widthPx = mDisplayMetrics.widthPixels;
总结:
densityDpi 每英寸多少个像素点,
density = densityDpi /160
APP根据densityDpi的大小决定调用哪个文件夹下的图片,关系如下:
drawable-ldpi 底密度,通常是指120
drawable-mdpi 中等密度,通常是指160
drawable-xhdpi 超高密度,通常是指320
px = dip*density
dip换算为PX的公式
/**
*
* Date:2014-7-22 </br> Desc:dip换算为px
* </br>
*
* @param ctx
* @param dpValue
* @return
*/
private int dip2px(Context ctx, float dpValue) {
final float scale = ctx.getResources().getDisplayMetrics().density;
return (int)(dpValue * scale + 0.5f);
}
px换算为dip 的公式
/**
*
* Date:2014-7-22 </br> Desc:px换算为dip
* </br>
*
* @param ctx
* @param pxValue
* @return
*/
private float px2dip(Context ctx, int pxValue) {
final float scale = ctx.getResources().getDisplayMetrics().density;
return (int)(pxValue / scale + 0.5f);
}
整个demo的代码如下所示
package com.test;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView mPxWidth;
private TextView mPxHeight;
private TextView mDpi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPxHeight = (TextView) findViewById(R.id.height_px);
mPxWidth = (TextView) findViewById(R.id.width_px);
mDpi = (TextView) findViewById(R.id.dpi);
//获取DisplayMetrics 显示的通用信息
DisplayMetrics mDisplayMetrics = getResources().getDisplayMetrics();
//高的像素
int heigthPx = mDisplayMetrics.heightPixels;
mPxHeight.setText("高的像素 "+ heigthPx);
System.out.println("高的像素 "+ heigthPx);
//宽的像素
int widthPx = mDisplayMetrics.widthPixels;
mPxWidth.setText("宽的像素" + widthPx);
System.out.println("宽的像素" + widthPx);
//屏幕像素密度,每英寸多少像素
int dpi = mDisplayMetrics.densityDpi;
mDpi.setText("每英寸多少像素"+dpi);
System.out.println("每英寸多少像素" + dpi);
//densityDpi 每英寸多少个像素点,
//density = densityDpi /160
float density = mDisplayMetrics.density;
System.out.println("density======"+density);
System.out.println("dpi/160======"+Integer.toString((dpi/160)));
}
/**
*
* Date:2014-7-22 </br> Desc:dip换算为px
* </br>
*
* @param ctx
* @param dpValue
* @return
*/
private int dip2px(Context ctx, float dpValue) {
final float scale = ctx.getResources().getDisplayMetrics().density;
return (int)(dpValue * scale + 0.5f);
}
/**
*
* Date:2014-7-22 </br> Desc:px换算为dip
* </br>
*
* @param ctx
* @param pxValue
* @return
*/
private float px2dip(Context ctx, int pxValue) {
final float scale = ctx.getResources().getDisplayMetrics().density;
return (int)(pxValue / scale + 0.5f);
}
}
参考:http://blog.csdn.net/wqunwang506/article/details/7925333
参考:http://blog.csdn.net/mr_icefox/article/details/38033843
参考:http://blog.csdn.net/yanzi1225627/article/details/17199323
drawable-mdpi 中等密度,通常是指160
drawable-xhdpi 超高密度,通常是指320
/**
*
* Date:2014-7-22 </br> Desc:dip换算为px
* </br>
*
* @param ctx
* @param dpValue
* @return
*/
private int dip2px(Context ctx, float dpValue) {
final float scale = ctx.getResources().getDisplayMetrics().density;
return (int)(dpValue * scale + 0.5f);
}
px换算为dip 的公式
/**
*
* Date:2014-7-22 </br> Desc:px换算为dip
* </br>
*
* @param ctx
* @param pxValue
* @return
*/
private float px2dip(Context ctx, int pxValue) {
final float scale = ctx.getResources().getDisplayMetrics().density;
return (int)(pxValue / scale + 0.5f);
}
整个demo的代码如下所示
package com.test;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView mPxWidth;
private TextView mPxHeight;
private TextView mDpi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPxHeight = (TextView) findViewById(R.id.height_px);
mPxWidth = (TextView) findViewById(R.id.width_px);
mDpi = (TextView) findViewById(R.id.dpi);
//获取DisplayMetrics 显示的通用信息
DisplayMetrics mDisplayMetrics = getResources().getDisplayMetrics();
//高的像素
int heigthPx = mDisplayMetrics.heightPixels;
mPxHeight.setText("高的像素 "+ heigthPx);
System.out.println("高的像素 "+ heigthPx);
//宽的像素
int widthPx = mDisplayMetrics.widthPixels;
mPxWidth.setText("宽的像素" + widthPx);
System.out.println("宽的像素" + widthPx);
//屏幕像素密度,每英寸多少像素
int dpi = mDisplayMetrics.densityDpi;
mDpi.setText("每英寸多少像素"+dpi);
System.out.println("每英寸多少像素" + dpi);
//densityDpi 每英寸多少个像素点,
//density = densityDpi /160
float density = mDisplayMetrics.density;
System.out.println("density======"+density);
System.out.println("dpi/160======"+Integer.toString((dpi/160)));
}
/**
*
* Date:2014-7-22 </br> Desc:dip换算为px
* </br>
*
* @param ctx
* @param dpValue
* @return
*/
private int dip2px(Context ctx, float dpValue) {
final float scale = ctx.getResources().getDisplayMetrics().density;
return (int)(dpValue * scale + 0.5f);
}
/**
*
* Date:2014-7-22 </br> Desc:px换算为dip
* </br>
*
* @param ctx
* @param pxValue
* @return
*/
private float px2dip(Context ctx, int pxValue) {
final float scale = ctx.getResources().getDisplayMetrics().density;
return (int)(pxValue / scale + 0.5f);
}
}
参考:http://blog.csdn.net/wqunwang506/article/details/7925333