Android的px,dpi,dip三者的关系详解
2015-04-22 11:34
531 查看
px,dpi,dip 这三个东西大家都有了解,这3个都是单位,其中前2个单位在很多别的地方都有使用,但是dip这个单位是Android用来解决不同分辨率屏幕适配的一种方案,也就是大家熟知的dp。
dpi一种像素密度,英文全称是 Dots Per Inch 字面上意思也很好理解,就是指每英寸的像素数量,这里Inch是英寸。1英寸 = 2.54cm,我们项目中的res中的 hdpi,xdpi,xhdpi就是用的这个单位。一般情况 ldpi是120,mdpi是160,hdpi是240,xhdpi是320。
dip = 160px/dpi
px = dip*dpi/160
试想现在有2个屏幕,屏幕的大小都是1寸,A屏幕密度为160,B屏幕密度为320。要去显示一个为宽度为80按钮button。如果用px为单位,A屏幕上button占屏幕的一半0.5寸,B屏幕上button占屏幕的四分之一 0.25寸,小了一半。如果用dip 为单位 80dip
A屏幕上的大小是:80*160/160=80px,
B屏幕上的大小 : 80*320/160 = 160px 。
由于B的密度是A的2倍,现在B屏幕上button的大小自动增加了一倍,这样在A和B屏幕上button可以显示相同的大小了。使用dip这个单位也就达到了适配的目的,顺便说一句dip原本是dip,为了和sp这个单位同意,改名成了dp。
这里的w,h 就是屏幕的宽高分辨率
同样这里的w,h 就是屏幕的宽高分辨率
既然我们已经学习了dpi当然也要知道怎么去获取也很简单
dpi就是屏幕密度了。下面用一个简单的例子总结
px
全拼pixel,我们常说的像素,构成我们屏幕上图像的最小单位dpi
作为屏幕分辨率单位如果只有px,明显太单薄了,于是有了dpi这个新单位。dpi一种像素密度,英文全称是 Dots Per Inch 字面上意思也很好理解,就是指每英寸的像素数量,这里Inch是英寸。1英寸 = 2.54cm,我们项目中的res中的 hdpi,xdpi,xhdpi就是用的这个单位。一般情况 ldpi是120,mdpi是160,hdpi是240,xhdpi是320。
dip
由于Android手机各式各样,我们开发时必然会遇到坑爹的屏幕适配问题,这里Android就用了 dip这个单位。dip 全称是Density-independent pixel 翻译过来就是 像素无关密度 他的大小就是一个1个dpi 有160个像素的屏幕大小,他的计算公式也很简单。从他的定义就可以看出来:dip = 160px/dpi
px = dip*dpi/160
试想现在有2个屏幕,屏幕的大小都是1寸,A屏幕密度为160,B屏幕密度为320。要去显示一个为宽度为80按钮button。如果用px为单位,A屏幕上button占屏幕的一半0.5寸,B屏幕上button占屏幕的四分之一 0.25寸,小了一半。如果用dip 为单位 80dip
A屏幕上的大小是:80*160/160=80px,
B屏幕上的大小 : 80*320/160 = 160px 。
由于B的密度是A的2倍,现在B屏幕上button的大小自动增加了一倍,这样在A和B屏幕上button可以显示相同的大小了。使用dip这个单位也就达到了适配的目的,顺便说一句dip原本是dip,为了和sp这个单位同意,改名成了dp。
获取屏幕分辨率的方法
获取屏幕分辨率有2种方法:方法一 :
Display mDisplay = getWindowManager().getDefaultDisplay(); int W = mDisplay.getWidth(); int H = mDisplay.getHeight();
这里的w,h 就是屏幕的宽高分辨率
方法二 :
DisplayMetrics mDisplayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics); int W = mDisplayMetrics.widthPixels; int H = mDisplayMetrics.heightPixels;
同样这里的w,h 就是屏幕的宽高分辨率
既然我们已经学习了dpi当然也要知道怎么去获取也很简单
DisplayMetrics dm = new DisplayMetrics(); dm = getResources().getDisplayMetrics(); int dpi = dm.densityDpi;
dpi就是屏幕密度了。下面用一个简单的例子总结
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DisplayMetrics dm = new DisplayMetrics(); dm = getResources().getDisplayMetrics(); int dpi = dm.densityDpi;
int widthPx = dm.widthPixels;
int heightPx = dm.heightPixels;
Log.d("MainActivity", "dpi : "+dpi);
Log.d("MainActivity", "widthPx : "+widthPx);
Log.d("MainActivity", "heightPx : "+heightPx);
}
}
相关文章推荐
- Android中像素单位dip、dpi、px、pt、sp、in等等的全面详解
- Android 各像素单位之间的关系 dp/dip px dpi
- Android中dpi,dp(dip),px关系,与计算公式
- android - px(像素)、dpi(像素密度)、dip(密度无关像素)之间的关系
- android里px、dip、dp、dpi的关系
- android中常见单位 dp,sp,px,pt,in,mm,dpi,dip详解
- Android dpi、dip、px、分辨率、屏幕尺寸、density 关系以及换算
- Android dpi,dp,dip,px的关系
- Android dip dp px dpi之间的关系
- Android 分辨率 dip dp dpi px sp 详解
- Android中 dp,px,dpi三者之间的关系
- Android中 dp,px,dpi三者之间的关系
- Android中dpi 、 dip 、px、density分辨率、屏幕尺寸关系以及换算
- Android开发中dip,dpi,density,px等详解
- Android中dpi,dp,dip,px.sp等各种单位详解
- Android中 dp,px,dpi三者之间的关系
- Android中 dp,px,dpi三者之间的关系
- Android中 dp,px,dpi三者之间的关系
- 移动开发:Android中 dp,px,dpi三者之间的关系
- Android开发中dip,dpi,density,px等详解