px与dip换算(2)

发布时间:2016-12-9 17:51:55 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"px与dip换算(2)",主要涉及到px与dip换算(2)方面的内容,对于px与dip换算(2)感兴趣的同学可以参考一下。

原文地址:http://www.cnblogs.com/error404/archive/2011/11/03/2234165.html 1. dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关, 一般我们为了支持WVGA、HVGA和QVGA 推荐使用这 这个,不依赖像素。 这里要特别注意dip与屏幕密度有关,而屏幕密度又与具体的硬件有关,硬件设置不正确,有可能导致dip不能正常显示。 在屏幕密度为160的显示屏上,1dip=1px,有时候可能你的屏幕分辨率很大如480*800, 但是屏幕密度没有正确设置比如说还是160, 那么这个时候凡是使用dip的都会显示异常,基本都是显示过小。 dip的换算: dip(value)=(int) (px(value)/1.5 + 0.5) 2. dp: 很简单,和dip是一样的。 3. px: pixels(像素),不同的设备不同的显示屏显示效果是相同的,这是绝对像素,是多少就永远是多少不会改变。 4. sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。 备注: 根据google的推荐,像素统一使用dip,字体统一使用sp 举个例子区别px和dip: px就是像素,如果用px,就会用实际像素画,比个如吧,用画一条长度为240px的横线,在480宽的模拟器上看就是一半的屏宽, 而在320宽的模拟器上看就是2/3的屏宽了。 而dip,就是把屏幕的高分成480分,宽分成320分。比如你做一条160dip的横线,无论你在320还480的模拟器上, 都是一半屏的长度。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这么久,马上毕业要参加工作了,一直对px、dip、sp、dp这几个单位概念似懂非懂的,这次因为工作上的需要,网上搜了点资料并整理了下,写篇日志以便以后阅读。 1.px (pixels)(像素):是屏幕的物理像素点,与密度相关,密度大了,单位面积上的px会比较多。通常不推荐使用这个。 2.dip或dp(与密度无关的像素):一个基于density的抽象单位,这个和设备硬件有关,通常在开发中设置一些view的宽高推荐用这个,一般情况下,在不同分辨率,都不会有缩放的感觉。在运行时, Android根据使用中的屏幕的实际密度, 透明地处理任何所需dip单位的缩放。 3.sp(与刻度无关的像素):同dip/dp相似,会根据用户的字体大小偏好来缩放,主要用于设置字体的大小。 可能很多朋友对dip和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在不同分辨率时,是否支持多密度的方法。 <manifest xmlns:android="http://schemas.android.com/apk/res/android"> ... <supports-screens      android:smallScreens="true"      android:normalScreens="true"      android:largeScreens="true"      android:xlargeScreens="true"      android:anyDensity="true" /> ... </manifest>   附: 系统对屏幕大小和密度分类对照图 :   表 1. Android SDK中包含的模拟器皮肤的屏幕尺寸和密度,以及其他典型的分辨率.   Low density (120), ldpi Medium density (160), mdpi High density (240), hdpi Extra high density (320), xhdpi Small screen QVGA (240x320)   480x640   Normal screen WQVGA400 (240x400)  WQVGA432 (240x432) HVGA (320x480) WVGA800 (480x800)  WVGA854 (480x854)  600x1024 640x960 Large screen WVGA800** (480x800)  WVGA854** (480x854) WVGA800* (480x800)  WVGA854* (480x854)  600x1024     Extra Large screen 1024x600 WXGA (1280x800)† 1024x768 1280x768 1536x1152 1920x1152  1920x1200 2048x1536 2560x1536  2560x1600 * 要模拟此配置, 使用WVGA800 或 WVGA854创建一个AVD, 指定自定义密度160. ** 要模拟此配置, 使用WVGA800 或 WVGA854创建一个AVD, 指定自定义密度120. 辅助工具类: import android.content.Context;   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);       }   }  转自http://my.oschina.net/xiangmao/blog/51570 原文地址:http://www.cnblogs.com/error404/archive/2011/11/03/2234165.html 1. dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关, 一般我们为了支持WVGA、HVGA和QVGA 推荐使用这 这个,不依赖像素。 这里要特别注意dip与屏幕密度有关,而屏幕密度又与具体的硬件有关,硬件设置不正确,有可能导致dip不能正常显示。 在屏幕密度为160的显示屏上,1dip=1px,有时候可能你的屏幕分辨率很大如480*800, 但是屏幕密度没有正确设置比如说还是160, 那么这个时候凡是使用dip的都会显示异常,基本都是显示过小。 dip的换算: dip(value)=(int) (px(value)/1.5 + 0.5) 2. dp: 很简单,和dip是一样的。 3. px: pixels(像素),不同的设备不同的显示屏显示效果是相同的,这是绝对像素,是多少就永远是多少不会改变。 4. sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。 备注: 根据google的推荐,像素统一使用dip,字体统一使用sp 举个例子区别px和dip: px就是像素,如果用px,就会用实际像素画,比个如吧,用画一条长度为240px的横线,在480宽的模拟器上看就是一半的屏宽, 而在320宽的模拟器上看就是2/3的屏宽了。 而dip,就是把屏幕的高分成480分,宽分成320分。比如你做一条160dip的横线,无论你在320还480的模拟器上, 都是一半屏的长度。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这么久,马上毕业要参加工作了,一直对px、dip、sp、dp这几个单位概念似懂非懂的,这次因为工作上的需要,网上搜了点资料并整理了下,写篇日志以便以后阅读。 1.px (pixels)(像素):是屏幕的物理像素点,与密度相关,密度大了,单位面积上的px会比较多。通常不推荐使用这个。 2.dip或dp(与密度无关的像素):一个基于density的抽象单位,这个和设备硬件有关,通常在开发中设置一些view的宽高推荐用这个,一般情况下,在不同分辨率,都不会有缩放的感觉。在运行时, Android根据使用中的屏幕的实际密度, 透明地处理任何所需dip单位的缩放。 3.sp(与刻度无关的像素):同dip/dp相似,会根据用户的字体大小偏好来缩放,主要用于设置字体的大小。 可能很多朋友对dip和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在不同分辨率时,是否支持多密度的方法。 <manifest xmlns:android="http://schemas.android.com/apk/res/android"> ... <supports-screens      android:smallScreens="true"      android:normalScreens="true"      android:largeScreens="true"      android:xlargeScreens="true"      android:anyDensity="true" /> ... </manifest>   附: 系统对屏幕大小和密度分类对照图 :   表 1. Android SDK中包含的模拟器皮肤的屏幕尺寸和密度,以及其他典型的分辨率.   Low density (120), ldpi Medium density (160), mdpi High density (240), hdpi Extra high density (320), xhdpi Small screen QVGA (240x320)   480x640   Normal screen WQVGA400 (240x400)  WQVGA432 (240x432) HVGA (320x480) WVGA800 (480x800)  WVGA854 (480x854)  600x1024 640x960 Large screen WVGA800** (480x800)  WVGA854** (480x854) WVGA800* (480x800)  WVGA854* (480x854)  600x1024     Extra Large screen 1024x600 WXGA (1280x800)† 1024x768 1280x768 1536x1152 1920x1152  1920x1200 2048x1536 2560x1536  2560x1600 * 要模拟此配置, 使用WVGA800 或 WVGA854创建一个AVD, 指定自定义密度160. ** 要模拟此配置, 使用WVGA800 或 WVGA854创建一个AVD, 指定自定义密度120. 辅助工具类: import android.content.Context;   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);       }   }  转自http://my.oschina.net/xiangmao/blog/51570

上一篇:java 异常
下一篇:普通的男人,才最适合做老公。

相关文章

关键词: px与dip换算(2)

相关评论