getDimension方法的一些坑
2016-02-16 17:09
218 查看
(转载)http://luckyandyzhang.github.io/2015/09/25/getDimension%E6%96%B9%E6%B3%95%E7%9A%84%E4%B8%80%E4%BA%9B%E5%9D%91/
在Android开发中,我们经常会在
然后我们会在代码中获取该值
你会发现获取到
比如我这里获得的值却是32(我所调试的手机屏幕属于xhdpi)
那么这个值究竟是怎么算的呢?我们先来看个表:
“我裤子都脱了,你就给我看这个?”
莫慌,答案在下面。
其实
在自定义View的时候,为了方便开发者可以在xml中设置一些属性,我们通常会在
然后在代码中获取
此时需要注意的是,假如我们在xml中已经设置了
如果我们希望默认值
so easy ~
我稍微解释一下。上面那句代码表示的是,将
第一篇博客就这样愉快的结束了…
<
Android反编译工具
问题背景
在Android开发中,我们经常会在dimens.xml中定义一些值,比如边距,字体大小等
1 2 3 | <resources> <dimen name="item_padding">16dp</dimen> </resources> |
1 | float itemPadding = getResources().getDimension(R.dimen.item_padding); |
itemPadding的值并不一定是16。
比如我这里获得的值却是32(我所调试的手机屏幕属于xhdpi)
那么这个值究竟是怎么算的呢?我们先来看个表:
dpi | 分辨率 | 倍数 |
---|---|---|
mdpi | 160dpi | 1X |
hdpi | 240dpi | 1.5X |
xhdpi | 320dpi | 2X |
xxhdpi | 480dpi | 3X |
xxxhdpi | 640dpi | 4X |
莫慌,答案在下面。
其实
getDimension()这个方法会将原有的值以px为单位进行转换,由于我的手机是xhdpi的,转换为px是2倍的关系,最终获得的值就是32
扩展
在自定义View的时候,为了方便开发者可以在xml中设置一些属性,我们通常会在attr.xml声明我们自己的属性
1 2 34 | <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="Gauge"> <attr name="gaugeInnerPadding" format="dimension" /> </declare-styleable> </resources> |
1 2 3 | TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.Gauge, defStyle, 0); float mGaugeInnerPadding = attributes.getDimension(R.styleable.Gauge_gaugeInnerPadding, 10f); attributes.recycle(); |
gaugeInnerPadding的值(比如12dp),那么根据上面的知识,我们知道,最终获取到的值是转化为px的。但是,如果我们没有在xml中设置
gaugeInnerPadding,那么获取到的是默认值
10f,是不会转换为px的。这里需要注意一下。
如果我们希望默认值
10f也能转换为px,该怎么办呢?
so easy ~
1 | mGaugeInnerPadding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10f, displayMetrics); |
10f当做是以dip为单位的(也就是
10dp),然后根据当前屏幕的dpi,将该值转换为以px为单位的。
第一篇博客就这样愉快的结束了…
<
Android反编译工具
相关文章推荐
- Android EventBus开源项目
- 纵表和横表的概念及其相互转换
- InnovEDA PowerPCB/BGA Suite 4.0.1 + InnovEDA Visual HDL V6.7.8 for Verlog
- 怎样让pl sql developer 界面视图复位
- debian服务器上不了网,缺少默认网关
- Overview of Flashback Technology
- linux下 SCP 、ssh、ssh-copy-id采用非默认端口传输
- vim ctags omnicppcomplete 无法自动提示成员变量,总是提示“找不到模式”的解决方法
- php将一个数值切成N份
- RHCE 学习笔记(23) - 磁盘格式化和分区
- UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout
- 钣金CAD/CAM系统 Cnckad v10.066 全能破解版 1CD
- 转载 loadrunner的一些问题解决
- 下载、运行docker
- 《转载》IOS高级开发~开机启动&无限后台运行&监听进程
- Android 之 selector
- 生成Area URL链接
- java 的io 和nio的简单读写
- Android 开发系列(4) - JNIEnv::FindClass 的问题
- POJ 2686_Traveling by Stagecoach【状态压缩DP】