Android下的单位及相互之间的关系和换算
来源:互联网 发布:lcd1602与单片机连接图 编辑:程序博客网 时间:2024/04/27 01:23
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=120density 值表示每英寸有多少个显示点,与分辨率是两个概念。 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); } }
1 0
- Android下的单位及相互之间的关系和换算
- DPI和像素、厘米、英寸之间的关系和换算及CSS中的长度单位
- android 手机的单位换算
- 电池单位中的毫安时与能量单位千焦及大卡的换算关系
- Android常用的验证及单位换算工具类
- DPI和像素、厘米、英寸之间的关系和换算及CSS中的长度单位、位深度、ppi
- 单位与单位的换算
- Android 各尺寸单位间的换算
- android api提供的单位换算方法
- 功率单位mW和dBm的换算
- 功率单位mW和dBm的换算
- 时间单位的换算
- 时间的单位换算
- 时间的单位换算
- 秒的换算单位
- 时间的单位换算
- 电容的单位换算
- 电容的单位换算
- swift string 函数
- 利用dom4j解析.xml之查询标签
- html03
- 使用SimpleDateFormat类对时间的合法性进行校验,使用正则表达式校验时间字符串的合法性;
- uboot-tiny4412启动流程(下)----如何将自己的裸板测试程序加入uboot中启动测试
- Android下的单位及相互之间的关系和换算
- html04
- JavaScript基础(一)--基础知识归纳
- 不定参数函数
- html05
- AndroidStudio使用SVN代码管理
- Scala退出循环体
- 前端面试题第三套
- 抽象方法 - 接口