android: getDimension, getDimensionPixelOffset 和getDimensionPixelSize 区别

◆结论:

getDimension

获取某个dimen的值,如果是dp或sp的单位,将其乘以density,如果是px,则不乘   返回float

getDimensionPixelOffset

获取某个dimen的值,如果是dp或sp的单位,将其乘以density,如果是px,则不乘  返回int

getDimensionPixelSize

则不管写的是dp还是sp还是px,都会乘以denstiy.

◆代码设置字体大小

tv_test.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);

◆实验

<resources>
    <dimen name="dp_01">16dp</dimen>
    <dimen name="px_01">16px</dimen>
    <dimen name="sp_01">16sp</dimen>
</resources>
    float a1=getResources().getDimension(R.dimen.dp_01);
    int a2=getResources().getDimensionPixelOffset(R.dimen.dp_01);
    int a3=getResources().getDimensionPixelSize(R.dimen.dp_01);  

    float b1=getResources().getDimension(R.dimen.px_01);
    int b2=getResources().getDimensionPixelOffset(R.dimen.px_01);
    int b3=getResources().getDimensionPixelSize(R.dimen.px_01);  

    float c1=getResources().getDimension(R.dimen.sp_01);
    int c2=getResources().getDimensionPixelOffset(R.dimen.sp_01);
    int c3=getResources().getDimensionPixelSize(R.dimen.sp_01);  

    Log.d("test", "getDimension= "+a1+", getDimensionPixelOffset="+a2+",getDimensionPixelSize="+a3);
    Log.d("test", "getDimension= "+b1+", getDimensionPixelOffset="+b2+",getDimensionPixelSize="+b3);
    Log.d("test", "getDimension= "+c1+", getDimensionPixelOffset="+c2+",getDimensionPixelSize="+c3);  

logcat输出结果

//Device (480*800,240dpi,density=1.5):
getDimension= 24.0, getDimensionPixelOffset=24,getDimensionPixelSize=24
getDimension= 16.0, getDimensionPixelOffset=16,getDimensionPixelSize=24
getDimension= 24.0, getDimensionPixelOffset=24,getDimensionPixelSize=24  

原文地址:https://www.cnblogs.com/yongdaimi/p/10334081.html

时间: 2024-10-10 14:17:36

android: getDimension, getDimensionPixelOffset 和getDimensionPixelSize 区别的相关文章

android 通过getDimension,getDimensionPixelOffset和getDimensionPixelSize获取dimens.xml文件里面的变量值

dimens.xml里写上三个变量: <dimen name="activity_vertical_margin1">16dp</dimen> <dimen name="activity_vertical_margin2">16px</dimen> <dimen name="activity_vertical_margin3">16sp</dimen> 读取这三个变量: fl

getDimension()、getDimensionPixelOffset()和getDimensionPixelSize()区别详解

getDimension()是基于当前DisplayMetrics进行转换,获取指定资源id对应的尺寸.文档里并没说这里返回的就是像素,要注意这个函数的返回值是float,像素肯定是int. getDimensionPixelSize()与getDimension()功能类似,不同的是将结果转换为int,并且小数部分四舍五入. getDimensionPixelOffset()与getDimension()功能类似,不同的是将结果转换为int,并且偏移转换(offset conversion,函

Android getDimension,getDimensionPixelOffset,getDimensionPixelSize

1.例如在onMeasure(int , int)方法中可能要获取自定义属性的值.如: 1 TypedArray a = context.obtainStyledAttributes(attrs, 2 R.styleable.CascadeLayout); 3 4 try { 5 // 获取xml文件中给自定义属性设置的值 6 mHorizontalSpacing = a.getDimensionPixelSize( 7 R.styleable.CascadeLayout_horizontal_

getDimension,getDimensionPixelOffset和getDimensionPixelSize的一点说明

getDimension和getDimensionPixelOffset的功能类似, 都是获取某个dimen的值,但是如果单位是dp或sp,则需要将其乘以density 如果是px,则不乘.并且getDimension返回float,getDimensionPixelOffset返回int. 而getDimensionPixelSize则不管写的是dp还是sp还是px,都会乘以denstiy. 代码如下: [html] view plaincopy <resources> <dimen 

android 适配器simpleadapter和baseadapter区别

android 适配器 simpleadapter 和 baseadapter 设计网络程序或者数据处理显示程序的时候,常常会使用 simpleadapter 和baseadapter 来实现. adapter 是适配器模式,是数据和界面之间的桥梁.baseadapter 是一个抽象的类,要使用必需为其定义子类并实现相关方法.simpleadapter 派生于 baseadapter ,已经实现了相关的方法,所以可以直接使用.二者在使用效果上没有太大的区别,两者可以设计出几乎一模一样的界面.但在

Android getMeasuredHeight()与getHeight()的区别

public final int getMeasuredHeight () Added in API level 1 Like getMeasuredHeightAndState(), but only returns the raw width component (that is the result is masked by MEASURED_SIZE_MASK). Returns The raw measured height of this view. public final int

java的String和android的String有什么区别?

这是今天阿里电话面试被问到的,在之前确实没有想过(一直以为是一样的),于是面试完之后,我马上打开了源码,对这两个String类进行了比较,下面是我的发现. 首先我观察了这两个String类所导入的包,发现两者有些差异: 这是android版本: import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.nio.CharBuffe

Android Message和obtainMessage的区别

前几天需要实现一个以太网功能就看了以太网的源码部分,看见了源码部分在消息处理时,发现有一些不同的地方: 平时我在处理消息时: 1.首先创建Handler对象: private Handler handler = new Handler(){ public void handleMessage(Message msg) { switch (msg.what) { case 0: break; default: break; } }; }; 2.然后是消息处理: private void TestH

Android中@id与@+id区别

近日升级adt21+后,在输出apk时碰到编译layout异常,看了下是因为有人在layout引用一个不存在的resID时用了 @+id/xxx,而不是@id/xxx,导致debug编译器没显示错误,而在打包时的编译器出现错误,adt21-则没有此问题. 附上配图说明: Android中@id与@+id区别 : Android中的组件需要用一个int类型的值来表示,这个值也就是组件标签中的id属性值. id属性只能接受资源类型的值,也就是必须以@开头的值,例如,@id/abc.@+id/xyz等