getDimension(), getDimensionPixelOffset(), getDimensionPixelSize()的区别

Android 面试题总结之Android 进阶(一) Android 面试题总结之Android 进阶(一) 在前几篇文章中都是讲的基础,大家应该会觉得非常熟悉,但往往我们可能对于基础某些细节认识不够彻底或贯穿不全,我一直认为基础都是比较难的,那么本章节终于到进阶啦,主要讲的是View 的相关知识,在前面《Android 面试题总结之Android 基础 (六)》 中已经对View有了一定的了解,由于内容较多且也是面试必考题,所以将分两篇继续 阅读详情

Resources中的这三个方法很让人迷惑。究竟有什么区别。

 

看一下源码: 


1. getDimension()

    public float getDimension(int id) throws NotFoundException {
        synchronized (mTmpValue) {
            TypedValue value = mTmpValue;
            getValue(id, value, true);
            if (value.type == TypedValue.TYPE_DIMENSION) {
                return TypedValue.complexToDimension(value.data, mMetrics);
            }
            throw new NotFoundException(
                    "Resource ID #0x" + Integer.toHexString(id) + " type #0x"
                    + Integer.toHexString(value.type) + " is not valid");
        }
    }


 

最终会调用TypedValue.complexToDimension()

    public static float complexToDimension(int data, DisplayMetrics metrics)
    {
        return applyDimension(
            (data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK,
            complexToFloat(data),
            metrics);
    }


 

2. getDimensionPixelOffset()

    public int getDimensionPixelOffset(int id) throws NotFoundException {
        synchronized (mTmpValue) {
            TypedValue value = mTmpValue;
            getValue(id, value, true);
            if (value.type == TypedValue.TYPE_DIMENSION) {
                return TypedValue.complexToDimensionPixelOffset(
                        value.data, mMetrics);
            }
            throw new NotFoundException(
                    "Resource ID #0x" + Integer.toHexString(id) + " type #0x"
                    + Integer.toHexString(value.type) + " is not valid");
        }
    }


最终会调用TypedValue.complexToDimensionPixelOffset()

    public static int complexToDimensionPixelOffset(int data,
            DisplayMetrics metrics)
    {
        return (int)applyDimension(
                (data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK,
                complexToFloat(data),
                metrics);
    }


 

3.complexToDimensionPixelSize()

    public int getDimensionPixelSize(int id) throws NotFoundException {
        synchronized (mTmpValue) {
            TypedValue value = mTmpValue;
            getValue(id, value, true);
            if (value.type == TypedValue.TYPE_DIMENSION) {
                return TypedValue.complexToDimensionPixelSize(
                        value.data, mMetrics);
            }
            throw new NotFoundException(
                    "Resource ID #0x" + Integer.toHexString(id) + " type #0x"
                    + Integer.toHexString(value.type) + " is not valid");
        }
    }


最终会调用TypedValue.complexToDimensionPixelSize()

    public static int complexToDimensionPixelSize(int data,
            DisplayMetrics metrics)
    {
        final float value = complexToFloat(data);
        final float f = applyDimension(
                (data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK,
                value,
                metrics);
        final int res = (int)(f+0.5f);
        if (res != 0) return res;
        if (value == 0) return 0;
        if (value > 0) return 1;
        return -1;
    }


这3个方法在resources.java中逻辑一致,只是最终调用的方法有所不同对比3个方法可以发现

getDimension() 返回值是的float大小。

getDimensionPixelOffset() 返回值是将 getDimension() 强转成int 的值。(强转)

getDimensionPixelSize() 返回值是将getDimension()+0.5 再强转成int的值。(4舍5入)

这3个方法的本质区别就是大小精确度的差别。想要大一点就用getDimensionPixelSize(),  想要精确点就用getDimension(), 想要小一点就用getDimensionPixelOffset()

 

基于结构的虚拟筛选模型 gnina 从源码编译 所需要的软件安装包: 安装 CUDA 装的时候看着点,第二个要你装驱动的选择,回答N,不装。 sudo sh cuda_10.0.130_410.48_linux.run sudo vim ~/.bashrc 在 ~/.bashrc 文件最后加上 export PATH=/usr/bin:/usr/local/cuda-10.0/bin${PATH} export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:${LD_LIBRARY_PATH} source ~ 阅读详情

相关推荐

手把手教你用RoboTwin训练RDT模型:从环境配置到实战微调(避坑指南)

本文提供了一份详尽的避坑指南,手把手教你如何在RoboTwin开源仿真环境中,从零开始配置环境、采集数据并完成RDT视觉语言动作模型的实战微调。文章涵盖了环境搭建、数据流水线构建、模型配置与训练等关键步骤,旨在帮助研究者和开发者高效利用仿真数据,低成本探索具身智能应用。

weixin_29094979的博客 131

getDimension()、getDimensionPixelSize()、getDimenPixelOffset()

我们在自定义View的时候,通常会指定自定义View的字体大小,然后我们获取字体大小的时候,可以有三个方法供选择。这三个方法的差异在哪里呢?我们先说结论,然后举一个具体的例子来实操一把。如果在xml文件中指定的单位是 dp,或者 sp的话 getDimension()、getDimensionPixelSize()和getDimenPixelOffset()的结果值都是将资源文件中定义的dp值乘以屏幕密度。

chuyouyinghe的专栏 932

个人信息保护合规审计人员(高级)能力考核试卷+面试模拟

《个人信息保护合规审计考试与面试指南》 摘要:本文提供个人信息保护合规审计考试及面试的全面指导。考试采用闭卷笔试形式,满分100分,合格线75分,时长120分钟,包含单选、多选、判断题及综合案例分析题。内容涵盖《个人信息保护法》核心条款、审计程序、风险评估等实务要点。面试环节采用情景模拟方式,重点考察应试者在压力下处理审计独立性、客户关系与监管要求的平衡能力,以及应对数据泄露等突发事件的处置流程。案例题聚焦大型互联网平台的数据收集、共享、跨境传输等高风险环节的合规审计,要求设计完整的审计方案框架。面试评分标

qq_41525079的博客 1142

getDimension、getDimensionPixelOffset、getDimensionPixelSize 源码解析之三者区别

getDimension、getDimensionPixelOffset、getDimensionPixelSize 源码解析之三者区别 getDimension 返回float值,getDimensionPixelOffset 将float强转为int值返回,getDimensionPixelSize 将float值四舍五入成int值返回

刘运召的博客 1858

车辆TBOX科普 第64次 TBOX系统集成测试与文档编写

汽车电子开发中,TBOX作为核心网关面临独特挑战:需处理多网络接口、满足严苛安全标准并确保10年以上可靠性。项目文档是开发流程的核心资产,必须与编码同步更新,构建从需求到测试的完整闭环。系统集成测试需分层进行,结合硬件在环测试和自动化工具,并严格管理缺陷。文档与测试深度协同,通过追溯矩阵确保每个需求都被覆盖验证。最终交付不仅是软件包,更是一套包含完整验证报告的信任体系。这种严谨的工程纪律,是将代码转化为车规级可靠产品的关键保障。

IT深耕十余载,大道之简 1317

MobaXterm隧道配置详解:为PyCharm远程开发打通‘最后一公里’

本文详细解析了如何利用MobaXterm配置SSH隧道,实现PyCharm远程开发的高效连接。通过本地端口转发技术,开发者可以安全访问内网服务器,特别适用于需要通过跳板机的复杂网络环境。文章涵盖从基础配置到企业级运维的全套解决方案,包括性能优化、安全加固等实用技巧。

weixin_30566063的博客 503

Android代码中使用getDimensionPixelSize方法调用dimens资源

在代码中如果需要设置UI控件的尺寸或字体大小,如果直接使用像素数字可能会有屏幕适配的问题,其实可以调用dimens中的资源定义,方法如下: getResources().getDimensionPixelSize(int id)方法返回dimens资源定义的像素数。 例如长度: params = new RelativeLayout.LayoutParams(220, 72); 可以在dimen...

冰雪世界 5702

把 ABAP writable CDS view entity 讲透:从只读建模到可写模型的 ABAP CDS 新能力

摘要:SAP引入的writable CDS view entity突破了传统CDS视图只读的限制,允许通过ABAP SQL直接进行数据修改。该特性通过WRITABLE关键字定义,使CDS视图成为与数据库表同等级别的可写对象。其核心价值在于为数据集成、中间层同步等场景提供结构化写入入口,但需注意不应绕过业务规则。最佳实践建议保持底层表结构简单映射,避免复杂变形。这一特性标志着CDS从单纯消费模型向双向数据交互能力的演进,为ABAP开发提供了新的数据边界设计思路。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1313

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

在dimens.xml定义如下变量: [java]view plaincopy         "dp">16dp        "sp">16sp        Android代码如下: [java]view plaincopy MySystemParams params = MySystemParams.getInstance(this);  St

Helloguoke的专栏 1143

PON架构(全光网络)

目前组网架构世界上有一种最快的速度又是光,以前传统以太网络规划满足不了现在的需求。有线网 无线网 全光网络方案场景 全光网络分类 以太全光网络 PON(Pas-sive-Optical Network 无源光网络) 再典型的中大型高校网络中 推荐万兆入室 千兆到桌面的带宽设计 一般三层 (终端-接入层-汇聚层-核心层-出口(安全设备)-互联网) 单校区核心设备 一般采用两台高性能的核心交换机 双机的方式采用的是 M-LAG 多校区之间核心交换机采用1

qq_56248592的博客 6269

【GameFramework框架】三、快速启动

这篇文章就带领大家如何快速启动GameFramework框架。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 4427

getDimension()、getDimensionPixelSize()和getDimensionPixelOffset()的区别

今天写代码的时候,需要从资源文件中读取一个长度值,用来设置控件的宽高,误以为getDimension()返回的就是资源里定义的dp值,后来发现不是我理解的那样。下面介绍一下getDimension()、getDimensionPixelSize()和getDimensionPixelOffset()的区别; 先看我在资源中的定义:<dimen name="guide_first_...

君羊 364

android 9.0Settings休眠时间项(屏幕超时)添加永不休眠功能

在9.0的系统产品开发中,系统中默认息屏时间为1分钟,可以通过在Setting中的息屏时间选项设置对应的息屏时间,但是在开发平板类的产品中,需要实现永不休眠的功能,所以需要在Settings中的息屏时间中添加永不休眠时间这一项来实现这个功能,接下来看息屏时间的相关功能,来添加这个功能

安卓兼职framework和app工程师的博客 2056

从源码看getDimension()、getDimensionPixelOffset()以及getDimensionPixelSize()三个区别

一、前言 我们在自定义控件的时候,通过 TypeArray(其实Resources 类也有这个方法,等等说。)的 getDimension、 getDimensionPixelSize 、getDimensionPixelOffset 可以获取到尺寸,然后,懵逼了。      二、源码 2.1 下面会分别贴出 TypeArray 中的三个方法的源码,加了简单的中文翻译 2.2  getDi

Wilshion的博客 2473

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

TypedArray实例对象的getDimension()、getDimensionPixelOffset()和getDimensionPixelSize()区别详解

这三个函数返回的都是绝对尺寸(px???),而不是相对尺寸(dp\sp等)。如果getDimension()返回结果是20.5f,那么getDimensionPixelSize()返回结果就是21,getDimensionPixelOffset()返回结果就是20。 如果想详细的了解http://www.cnblogs.com/android-zcq/p/5138368.html

wk的博客 2792

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

在自定义控件中使用自定义属性时,经常需要使用java代码获取在xml中定义的尺寸,相关有以下三个函数 (在类TypedArray和类Resources中都有这三个函数,功能类似,TypedArray中的函数是获取自定义属性的,Resources中的函数是获取android预置属性的) getDimension()是基于当前DisplayMetrics进行转换,获取指定资源id对应的

playerchenhe的专栏 497

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【android】getDimension()、getDimensionPixelOffset()和getDimensionPixelSize()区别详解

在自定义控件中使用自定义属性时,经常需要使用java代码获取在xml中定义的尺寸,相关有以下三个函数 getDimension()getDimensionPixelOffset()getDimensionPixelSize() (在类TypedArray和类Resources中都有这三个函数,功能类似,TypedArray中的函数是获取自定义属性的,Resources中的函数是获取

龍的传人 1100

getDimension(),getDimensionPixelOffset()和getDimensionPixelSize()区别(转载)

getDimension(),getDimensionPixelOffset()和getDimensionPixelSize()区别 转载地址:http://www.eoeandroid.com/thread-322627-1-1.html?_dsign=91c59c8f 在自定义控件中使用自定义属性时,经常需要使用java代码获取在xml中定义的尺寸,相关有以下三个函数

Qiiiiiiq的专栏 650

getdimension()、getDimensionPixelOffset()、getDimensionPixelSize()的区别

getdimension(): 将dimen值转为px,返回值类型为float。 getDimensionPixelOffset(): 与getDimension()一样,但只保留整数部分。返回值类型为int。 getDimensionPixelSize(): 与getDimension()一样,但只保留四舍五入后的整数部分,并且一个非零基值至少表示一个px。返回值类型为int。 ...

u011382177的专栏 865
上一篇: android中@TargetApi的作用
下一篇: android TextView setEms 方法名字
javalive09
博客等级 码龄16年 43粉丝 281原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值