getDimension()、getDimensionPixelSize()和getDimensionPixelSize()的区别_getdimension与getdimensionpixelsize区别-程序员宅基地

getDimension()、getDimensionPixelSize()和getDimensionPixelSize()这三个方法都是获取资源文件dimens.xml中的资源的。

今天来看看他们三者之前的区别。

1. 先看我的dimens.xml中资源的定义:

<dimen name="default_size">21dp</dimen>

2. MainActivity.java中获取资源并且将其打印:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        float dimension = getResources().getDimension(R.dimen.default_size);
        Log.e("TAG",String.format("getDimension(): %f", dimension) );

        int dimesionPixelSize = getResources().getDimensionPixelSize(R.dimen.default_size);
        Log.e("TAG",String.format("getDimensionPixelSize(): %d", dimesionPixelSize));

        int pixelOffset = getResources().getDimensionPixelOffset(R.dimen.default_size);
        Log.e("TAG",String.format("getDimensionPixelOffset(): %d", pixelOffset));

        //获得屏幕的宽度和高度
        DisplayMetrics metric = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metric);
        int width = metric.widthPixels;     // 屏幕宽度(像素)
        int height = metric.heightPixels;   // 屏幕高度(像素)
        float density = metric.density;      // 屏幕密度(0.75 / 1.0 / 1.5)
        int densityDpi = metric.densityDpi;  // 屏幕密度DPI(120 / 160 / 240)

        Log.e("TAG","width:" + width + " height:" + height + " density:" + density + " densityDpi:" + densityDpi);
    }
}


3. 我们来看log打印的结果

E/TAG: getDimension(): 31.500000
E/TAG: getDimensionPixelSize(): 32
E/TAG: getDimensionPixelOffset(): 31

E/TAG: width:480 height:800 density:1.5 densityDpi:240

从最后提条打印的结果可知,我的模拟器的分辨率是 480*800的,屏幕密度是1.5 ,DPI是240。

从打印结果就可以知道, getDimension()、getDimensionPixelSize()和getDeimensionPixelOffset()

三个方法都是将资源dimens.xml中的资源乘以屏幕密度,即 21 * 1.5 = 31.5,只是getDimens()返回的

是float,其余两个方法返回的是int类型的值。其中getDimensionPixelSize()方法返回的实际数值是

四舍五入的,而getDimensionPixelOffset返回的实际数值是去掉结果后面的小数点。




版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yihonglvyu1/article/details/53044351

智能推荐

LinearLayout中的layout_weight属性_linearlayout的weight属性就可以把界面平均分成两半-程序员宅基地

文章浏览阅读5.8k次。LinearLayout中的layout_weight属性布局LinearLayout代码Xml代码 xml version="1.0" encoding="utf-8"?> LinearLayout ="http://schemas.android.com/apk/res/android" android:orientation_linearlayout的weight属性就可以把界面平均分成两半

Qt网络编程:QWebSocketServer使用示例_qt中发送wss协议的请求-程序员宅基地

文章浏览阅读6.5k次,点赞4次,收藏38次。用QWebSocketServer来构建一个服务器,实现给连接它的各个客户端发送消息先把界面画出来如图:创建服务网和监听: WebSocketServer = new QWebSocketServer(QStringLiteral("testServer"),QWebSocketServer::NonSecureMode,this); //QWebSocketServer::SslMode 运行模式:安全模式(SecureMode)wss,非安全模式(NonSecureMo._qt中发送wss协议的请求

linux docker 目录挂载映射_linux创建网关docker映射目录-程序员宅基地

文章浏览阅读3.3w次,点赞8次,收藏30次。Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定。譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定:# docker run --name test -it --privileged -v /root/test:/root/softcentos:6 /bin/bash/root/test 是宿主机目录..._linux创建网关docker映射目录

概要设计说明书-程序员宅基地

文章浏览阅读1.2k次。目录1 引言 11.1 编写目的 11.2 范围 11.3 定义 11.4 参考资料 12 总体设计 12.1 需求规定 12.2 运行环境 22.3 基本设计概念和处理流程 22.4 结构 22.5 功能需求与程序的关系 22.6 人工处理过程 22.7 尚未解决的问题 33 接口设计 33.1 用户接口 33.2 外部接口 33.3 内部接口 34 运行设计 34.1 运行模块组合 34.2 运行控制 34.3 运行时间 45 系统数据结构设计 45.1 ._概要设计说明书

mit计算机博士申请英语要求,2020年麻省理工学院博士申请条件-程序员宅基地

文章浏览阅读1.2k次。麻省理工学院简介麻省理工学院(Massachusetts Institute of Technology),简称“麻省理工”(MIT),位于美国马萨诸塞州波士顿都市区剑桥市,主校区依查尔斯河而建,是世界著名私立研究型大学。 麻省理工学院创立于1861年,早期侧重应用科学及工程学,在第二次世界大战后,麻省理工学院倚靠美国国防科技的研发需要而迅速崛起。 在二战和冷战期间,麻省理工学院的研究人员对..._计算机博士需要什么英语的证书

利用CATextLayer渲染文本_catextlayer加载大文本-程序员宅基地

文章浏览阅读984次。本文总结自 iOS核心动画总结#import "ViewController.h"#import @interface ViewController ()@property (weak, nonatomic) IBOutlet UIView *labelView;@end@implementation ViewController- (void)view_catextlayer加载大文本

随便推点

Adjusted frame length exceeds 4096: 5637 - discarded 服务端解决_io.netty.handler.codec.toolongframeexception: adju-程序员宅基地

文章浏览阅读2.4w次,点赞2次,收藏5次。解决服务端Adjusted frame length exceeds 4096: 5637 - discarded问题1. 具体错误2. 错误原因3. 解决方法1. 具体错误下面展示一些 错误详情。io.netty.handler.codec.TooLongFrameException: Adjusted frame length exceeds 4096: 18247 - discarde..._io.netty.handler.codec.toolongframeexception: adjusted frame length exceeds

【技术综述】基于弱监督深度学习的图像分割方法综述​_image segmentation with a bounding box prior-程序员宅基地

文章浏览阅读901次。文章首发于微信公众号《有三AI》【技术综述】基于弱监督深度学习的图像分割方法综述​本文是基于弱监督的深度学习的图像分割方法的综述,阐述了弱监督方法的原理以及相对于全监督方法的优势,首发与《有三AI》作者 | 孙叔桥 编辑 | 言有三1 基础概念生活中,我们和周围的事物都是有“标签”的,比如人、杯子、天空等等。在不同的场景下,相同的事物可能对应了不同的标签,比如长在地..._image segmentation with a bounding box prior

linux下信号以及gdbt调试___memcpy_ssse3_back-程序员宅基地

文章浏览阅读4.1k次。int main(){char *ptr=null;memcpy(ptr,“nihao”,6)return 0}运行结果为 segmentation fault(core dumped)为段错误,内存访问错误gdb ./neicuncuowu(gdb) rProgram received signal SIGSEGV,(程序接受到了一个信号) Segmentation fault...___memcpy_ssse3_back

linux yum命令详解_linuxyum命令详解-程序员宅基地

文章浏览阅读6.9k次。linux yum命令详解_linuxyum命令详解

C语言程序——标准输出格式_c语言输出格式-程序员宅基地

文章浏览阅读6.8k次,点赞2次,收藏7次。stdio库中提供的printf()函数的使用。_c语言输出格式

创意SQL语句(2)_47780cno-程序员宅基地

文章浏览阅读2.5k次。----------------------------------1.把某个字段重新生气序列(从1到n):DECLARE @i intSet @i = 0Update Table1 Set @i = @i + 1,Field1 = @i2.按成绩排名次Update 成绩表Set a.名次 = (Select Count(*) + 1From 成绩表 bWhere a.总成绩 )From _47780cno

推荐文章

热门文章

相关标签