Android下的单位及相互之间的关系和换算
2016-12-15 23:36
429 查看
dip(简称dp)
一个基于 density(密度)的抽象单位,这个和设备硬件有关,通常在开发中设置一 些 view 的宽高推荐用这个,一般情况下,在不同分辨率,都不会有缩放的感觉。在运 行时, Android 根据使用中的屏幕的实际密度, 透明地处理任何所需 dip 单位的缩放。 不依赖设备像素,依据设备自动适应大小,推荐使用
sp
同 dip/dp 相似,会根据用户的字体大小偏好来缩放,专门用于设置字体的大小。
总结:在设置中,控件的高低大小使用的dp,不依赖设备的像素,根据设备自动适应大小。而,设置字体的大小要使用sp,可一个根据用户字体的大小进行缩放。
px
像素,是屏幕的物理像素点,与密度相关,密度大了,单位面积上的 px 会比较多。 在不同分辨率下会有不同的效果,通常不推荐使用这个,用dp进行替代;
dp与px之间的关系
首先明确一点: HVGA 屏 density=160;QVGA 屏 density=120; WVGA 屏 density=240;WQVGA 屏 density=120 density 值表示每英寸有多少个显示点,与分辨率是两个概念。 dip 到 px 的转换公式: px = dip * (density / 160) Android 官方定义 dip 等价于 160dpi 屏幕下的一个物理像素点, 即 1dip=1px。举例来 说, 在 240 dpi 的屏幕上, 1dip 等于 1.5px。 不同 density 下屏幕分辨率信息,以 480dip*800dip 的 WVGA(density=240)为例: 1. 当 density=120 时屏幕实际分辨率为 240px*400px (两个点对应一个分辨率)状态 栏和标题栏高为 19px 或者 25dip。 横屏时屏幕宽度为 400px 或者 800dip,工作区域高度 211px 或者 455dip; 竖屏时屏幕宽度为 240px 或者 480dip,工作区域高度 381px 或者 775dip。 2. 当 density=160 时屏幕实际分辨率为 320px*533px (3 个点对应两个分辨率)状态 栏和标题栏高为 25px 或者 25dip。 横屏是屏幕宽度 533px 或者 800dip,工作区域高度 295px 或者 455dip; 竖屏时屏幕宽度 320px 或者 480dip,工作区域高度 508px 或者 775dip。 3. 当 density=240 时屏幕实际分辨率为 480px*800px (一个点对于一个分辨率)状态 栏和标题栏高为 38px 或者 25dip。 横屏是屏幕宽度 800px 或者 800dip,工作区域高度 442px 或者 455dip; 竖屏时屏幕宽度 480px 或者 480dip,工作区域高度 762px 或者 775dip。
说明:
在 Android 的应用包 apk 中,系统会根据各个设备的具体情况引用相应的 资源文件(注:不加任何标签的资源是各种分辨率情况下共用的): 当屏幕 density=240 时,使用 hdpi 标签的资源; 当屏幕 density=160 时,使用 mdpi 标签的资源; 当屏幕 density=120 时,使用 ldpi 标签的资源;
下面是在 manifest 中设置 app 在不同分辨率时,是否支持多密度的方法
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="FrameLayout" android:versionCode="1" android:versionName="1.0" > -------- <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" /> ------- </manifest>
下面是dp与px的换算工具
public class DensityUtil { 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.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } }
相关文章推荐
- Android下的单位及相互之间的关系和换算
- Android中常用单位dp,px,sp之间的相互转换
- Android运行程序在各层架构之间的相互关系
- DPI和像素、厘米、英寸之间的关系和换算及CSS中的长度单位
- iOS尺寸单位pt、ppi与px之间换算关系
- Android中常用单位dp,px,sp之间的相互转换
- Android 各像素单位之间的关系 dp/dip px dpi
- Android中dp、sp、px、pt之间的换算关系
- Android中常用单位dp,px,sp之间的相互转换
- 硬件计量单位与相关联的单位之间的换算关系
- 像素、厘米、英寸之间的换算关系
- 图片像素、英寸、厘米之间的单位换算
- 图片像素、英寸、厘米之间的单位换算
- 创建Android项目时所填写的名称和Android程序之间的关系
- 转:深入解读Linux与Android的相互关系
- Android笔记-MultiThreading in Android(1)-Thread,Looper,Handler,Message,MessageQueue之间的关系
- android中View, Window, Activity, WindowManager,ViewRoot几者之间的关系
- Android 中Activity,Window和View之间的关系
- Android中Handler、Thread(HanlderThread)、Runnable之间的关系
- 深入解读Linux与Android的相互关系