Android的px,dpi,dip三者的关系详解
px,dpi,dip 这三个东西大家都有了解,这3个都是单位,其中前2个单位在很多别的地方都有使用,但是dip这个单位是Android用来解决不同分辨率屏幕适配的一种方案,也就是大家熟知的dp。
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实现屏幕滑动(类似主屏滑动第一屏---->到第2屏)
- Android像素单位dp、sp、px、pt的区别和比较
- [置顶] 新修改ADB,支持Android(安卓)4.2 系统 ,全部中文命令,手机屏
- Android(安卓)UI总结 Android(安卓)和H5 字体大小适配
- 探究Android的多分辨率支持以及各种类型图标尺寸大小
- 【凯子哥带你夯实应用层】Android的Google官方设计指南(上)
- 牛逼的Android(安卓)UI--第18章 与用户交互相关的设计模式 (中)
- 第三部分:Android(安卓)应用程序接口指南---第三节:应用程序资源--
- android主要类解析 Activity ,Intent ,IntentReceiver,Service ,