尺寸(Dimension)资源

Android11.0 修改系统默认显示大小 系统设置中的显示大小调整的就是屏幕密度,调整的越小,屏幕显示的内容就越多。在系统中都会有定义一个默认的屏幕密度。 阅读详情
4.2  尺寸(Dimension)资源

源代码目录:src/ch10/Dimension

尺寸资源是由一系列的浮点数组成的资源,这些资源需要在res/values目录的资源文件中定义,<dimen>标签用来定义尺寸资源。下面的代码定义了3个尺寸资源。

源代码文件:src/ch10/Dimension/res/values/dimension.xml

 
  1. <resources> 
  2.     <dimen name="size_px">50px</dimen> 
  3.     <dimen name="size_in">1.5in</dimen> 
  4.     <dimen name="size_sp">30sp</dimen> 
  5. </resources> 

从上面的代码可以看出,在尺寸值后面是尺寸单位。Android支持如下6种尺寸单位。

px:表示屏幕实际的像素。例如,320*480的屏幕在横向有320个像素,在纵向有480个像素。

in:表示英寸,是屏幕的物理尺寸,每英寸等于2.54厘米。例如形容手机屏幕大小,经常说3.2(英)寸、3.5(英)寸、4(英)寸就是指这个单位。这些尺寸是屏幕的对角线长度。如果手机的屏幕是3.2英寸,表示手机的屏幕(可视区域)对角线长度是3.2*2.54 = 8.128厘米。读者可以去量一量自己的手机屏幕,看和实际的尺寸是否一致。

mm:表示毫米,是屏幕的物理尺寸。

pt:表示一个点,是屏幕的物理尺寸,大小为1英寸的1/72。

dp:与密度无关的像素,这是一个基于屏幕物理密度的抽象单位。密度可以理解为每英寸包含的像素点个数(单位是dpi),1dp实际上相当于密度为160dpi的屏幕的一个点。也就是说,如果屏幕的物理密度是160dpi时,dp和px是等效的。现在用实际的手机屏幕说明一下。一块拥有320*480分辨率手机屏幕,如果宽度是2英寸、高度是3英寸,这块屏幕的密度就是160dpi。如果屏幕大小未变,而分辨率发生了变化,例如,分辨率由320*480变成了480*800,这时屏幕的物理密度就变大了(大于160dpi)。这就意味着屏幕每英寸可以显示更多的像素点,屏幕的显示效果就更细腻了。假设一个按钮的宽度使用dp作为单位,在160dpi时设为160dp,而在更高的dpi下(如320dpi),按钮宽度看上去和160dpi时的屏幕一样。这是由于系统在发现屏幕的密度不是160dpi时,会计算一个转换比例,然后用这个比例与实际设置的尺寸相乘就得出新的尺寸。计算比例的方法是目标屏幕的密度除以160。如果目标屏幕的密度是320dpi,那么这个比例就是2。如果按钮的宽度是160dp,那么在320dpi的屏幕上的宽度就是320个像素点(dp是抽象单位,在实际的屏幕上应转换成像素点)。从这一点可以看出,dp可以自适应屏幕的分辨率。不管屏幕分辨率如何变化,屏幕上控件的相对位置和尺寸总会保持不变。如果将按钮的宽度设成160px,那么在320dpi的屏幕上仍然会是160个像素点,看上去按钮宽度只是160dpi屏幕的一半。Android官方建议设置表示宽度、高度、位置等属性时应尽量使用dp作为尺寸单位。除了使用dp,也可以使用dip,它们是等效的。要注意的是,dpi表示密度,而dip=dp。在使用时不要弄混了。

sp:与比例无关的像素。这个单位与dp类似。不过除了自适应屏幕密度外,还会自适应用户设置的字体。因此,Android官方推荐在设置字体大小时(如android:textSize属性)应尽量使用sp作为尺寸单位。

下面的代码引用了dimension.xml文件中定义的尺寸资源。

源代码文件:src/ch10/Dimension/res/layout/main.xml

 
  1. <TextView android:layout_width="200px" android:layout_height="wrap_content" 
  2.     android:background="#FFF" android:textColor="#000" android:text="宽度:200像素" /> 
  3. <TextView android:layout_width="@dimen/size_in" android:layout_height="wrap_content" 
  4.     android:background="#FFF" android:text="宽度:1.5英寸" 
  5.     android:layout_marginTop="10dp" android:textColor="#000"/> 
  6. <TextView android:layout_width="20mm" android:layout_height="wrap_content" 
  7.     android:background="#FFF" android:text="宽度:20毫米" 
  8.     android:layout_marginTop="10dp" android:textColor="#000"/> 
  9. <TextView android:layout_width="100pt" android:layout_height="wrap_content" 
  10.     android:background="#FFF" android:text="宽度:100 points" 
  11.     android:layout_marginTop="10dp" android:textColor="#000"/> 
  12. <TextView android:layout_width="200dp" android:layout_height="@dimen/size_px" 
  13.     android:background="#FFF" android:text="宽度:200 dp\n高度:50 px" 
  14.     android:layout_marginTop="10dp" android:textColor="#000"/> 
  15. <TextView android:layout_width="200dp" android:layout_height="wrap_content" 
  16. android:background="#FFF" android:textSize="@dimen/size_sp" android:text="字体尺寸:30sp" 
  17.     android:layout_marginTop="10dp" android:textColor="#000"/> 

可以使用如下3个方法获取尺寸资源,这些方法会根据相应的尺寸单位返回与其对应的像素值。这3个方法的区别是返回值的类型不同(第1个方法返回float类型的值,后两个方法返回int类型的值)。

 
  1. floatsize1 = getResources().getDimension(R.dimen.size_in)));  
  2. //  对size1采用舍去的方式返回对应的整数,例如,size1=25.6,size2的值是25  
  3. int size2 = getResources().getDimensionPixelOffset(R.dimen.size_in)));  
  4. //  对size1采用四舍五入的方式返回对应的整数,例如,size1=25.6,size3的值是26  
  5. int size3 = getResources().getDimensionPixelSize(R.dimen.size_in)));  

如果想直接获取尺寸大小(不转换成像素),可以使用下面的代码。

 
  1. TypedValue outValue = new TypedValue();  
  2. //  getValue方法的第3个参数如果为true,表示即使资源值引用了另外的资源,系统  
  3. //  会通过递归的方法获取最终的资源值  
  4. getResources().getValue(R.dimen.size_in, outValue, true);  
  5. //  由于getValue方法并没有直接返回尺寸资源的值,所以需要使用complexToFloat方法进行转换  
  6. //  value的值是1.5  
  7. float value = TypedValue.complexToFloat(outValue.data);  

现在运行本例,会看到用各种尺寸资源设置不同属性的显示效果,如图10-12所示。

Dimension 立即下载

相关推荐

忍者安全渗透系统(NINJITSU OS V3)的安装详细过程,亲测新旧vm版本都可安装,附带下载来源

忍者安全渗透系统(NINJITSU)的安装详细过程,亲测新旧vm版本都可安装,附带下载来源

1万+

Android 12系统源码_屏幕设备(二)DisplayAdapter和DisplayDevice的创建

通过Android12系统源码梳理DMS模块内置物理屏幕适配器、虚拟屏幕适配器、模拟辅助屏幕适配器、Wifi屏幕适配器的创建过程。

AfinalStone的专栏 2071

基于eNSP的小型企业网络设计

在本次计算机网络课程设计中,围绕“小型企业网络搭建”这一主题,成功构建了一个高效、安全且易于管理的企业内部网络。通过本次课程设计,我们不仅掌握了小型企业网络搭建的关键技术和最佳实践,还培养了团队协作和问题解决的能力。本项目所构建的网络系统不仅满足了当前的业务需求,还具备良好的可扩展性和灵活性,为企业未来的数字化转型奠定了坚实的基础。

m0_67403143的博客 1442

使用尺寸(dimen)资源

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) 尺寸资源是一个数字类型的数据,被定义在res\values\dimens.xml中。 尺寸单位有: 1.像素(px):屏幕上的真实像素表示 2.英尺(in):基于屏幕的物理尺寸 3.毫米(mm):基于屏幕的...

孤云博客 2659

Carsim2019与Simulink (Matlab2018b)联合仿真成功(超详细)

Carsim与Simulink联合仿真成功

强强的博客 3万+

STM32CubeIDE入坑指南

一 前言 在科技日新月异的今天,作为从事效率为先的苦逼 IT 行业,秉承着我不入地狱谁入地狱的伟大革命精神,我决定再一次做第一个吃螃蟹的人,通过自身的入坑过程,为大家测试STM32CubeIDE这款新式工具。(其实是为了我能省点时间,快点做完项目,多挣点钱买几瓶肾气丸) 二 看一看别人是如何入坑的 二 手把手带你入坑 三 相关资料 ...

CH的博客 1万+

Android应用的资源

字符串资源该示例的字符串文件为:上面程序代码中每个元素定义一个字符串,name属性定义字符串的名称。颜色资源如下文件是该示例的颜色资源文件尺寸资源。

2401_83601703的博客 679

手把手教你用EGM96模型校正DEM数据(含在线工具推荐)

本文详细介绍了如何使用EGM96地球重力场模型校正DEM数据中的高程偏差。通过对比WGS84椭球面与大地水准面的差异,解释了校正原理,并提供了从在线工具快速验证到Python脚本批量处理的全流程实战指南,帮助GIS开发者和数据分析师确保高程数据基准一致,提升空间分析精度。

ttt77的博客 1007

Android11.0 在源码修改系统显示大小

1.修改\frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java。3.修改之后使用adb查看。

weixin_47752005的博客 953

ETAP实战:如何用仿真软件快速绘制标准一次接线图(附模板下载)

本文提供了一套基于ETAP软件高效绘制标准一次接线图的完整实战工作流。从国标符号库配置、绘图模板创建,到核心设备绘制、参数标注,再到利用软件模型进行拓扑检查与短路电流校核,手把手教你实现从零到一的专业图纸设计。文末附有实用模板下载,助你大幅提升电力设计效率与图纸质量。

weixin_29291573的博客 510

外骨骼机器人(二):自适应振荡器

振荡器是一种数学工具,可以用于实时跟踪、预测类周期信号的频率、相位、幅值等,而助行外骨骼机器人需要自动适应人体的行走频率、幅度,两者相结合,就能使助行外骨骼机器人拥有更舒适、更自然的行走步态。 ......

行者无疆的博客 4264

Apktool ResDimenValue:Android尺寸资源值处理机制详解

在Android应用开发与逆向工程中,尺寸资源(dimen)的正确解析与处理至关重要。Apktool作为一款强大的Android APK逆向工具,其内部实现了一套高效的尺寸资源值处理机制,本文将深入剖析Apktool中ResDimenValue相关的核心处理逻辑,帮助开发者理解Android资源编译与反编译的底层原理。 ## 尺寸资源的类型定义与格式约束 Apktool在处理尺寸资源时,首先通

gitblog_01049的博客 276

手把手教你 Ubuntu 24.04 离线安装 Ollama

本文介绍 Ubuntu 下离线安装 Ollama 并使用 Ollama 部署 llama3.1-70b 大模型

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 1018

Android实战技术: 用Dimension解决多屏幕适配的问题

http://blog.youkuaiyun.com/hitlion2008/article/details/9200135 开闭原则--可变与不变的分离,且容易定制 应用程序的目的是尽可能做到适用于多种设备,这些设备的配置不尽相同,有些不同的物理尺寸,分辨率.为了达到最佳的适配效果,和最少的代码重复,以及最好的可扩展性,就需要分离资源的使用和资源.用一个统一的资源管理者来管理资源.代

thinkinwm的专栏 631

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

资源resource

Android学习笔记(三九):资源resource(下) Dimension 用于字体大小,间距pading等等。常用的尺寸大小详细见Android 学习笔记(十四):Activity-AutoCompleteTextView,一般我们使用dip/dp和sp,因为和in(inch),mm,以及px(像素点)不同,它和物理屏幕尺寸大小,像素密度无关。 在res/val

The Void 605

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

从源代码中加载res / values / dimension.xml中的维度值

I'd like to load the value as it is. 我想按原样加载值。 I have two dimension.xml files, one in /res/values/d

p15097962069的博客 399

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Andriod输入框引入外形资源调节样式

 Android资源简介 1 什么是资源        指在res文件夹下的xml文件,每一种类型的xml文件都对应了一种资源。        例如:外形资源(shape)、尺寸资源(dimension)、颜色资源(color)等  2 尺寸资源和颜色资源放res/values目录下   3 *.xml(文本框的外形资源)可放到drawable目录下  4 设置渐变色与背景色只能取其一,后面会覆盖...

qq_40979551的博客 209

java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x1

出现Caused by: java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x1异常时,折腾了一段时间发现是dimens的值没有在默认dimens目录中定义。当旋转屏幕时,找不到值造成的问题。 07-22 10:39:28.968: E/BufferQueue(1049): [com.

wodejiang2009的专栏 1万+

Android应用资源---其他资源类型(More Types)(二)

Dimension型资源 定义在XML中的尺寸值。它是一个带有尺寸单位的数字。例如:10px、2in、5sp。以下是Android系统支持的尺寸单位: dp 密度无关的像素,它是基于屏幕的物理密度的一种抽象单位。相对与160dpi(每英寸的点数)的屏幕,每1dp大致等于1px。当运行在高密度的屏幕上时,用于描画1dp的像素数会适应屏幕的dpi的要求来进行放大。同样,当在低密度屏幕上时,1dp...

weixin_34218579的博客 162

Android常用控件

1.文本控件 1.1TextView 1.1.1它是显示文本的控件 1.1.2常用属性:android:text(设置文本框内文本内容)、android:autoLink(是否将符合指定格式的文本转换为可单击的超链接形式)、android:textColor(字体颜色)、android:textSize(字体大小)、android:textStyle(字体风格)、android:backgr

qq_38446250的博客 510

Android Studio常用控件

文本控件 Android资源 1、外形资源(shape) 2、尺寸资源(dimension) 2、颜色资源(color) Selector选择器 文本控件 1、 TextView 文本框 TextView直接继承View,作用就是在界面上显示文本(类似于Swing中的JLabel),同时它还是EditText、Button两个UI组件类的父...

qq_41454799的博客 4854

[Web 开发] 获取页面元素的坐标及大小

获取页面元素的位置坐标以及大小尺寸是Web开发中的常见问题。 这篇MSDN 文章 《Measuring Element Dimension and Location》 是非常好的资料,推荐读一下。 我把文中的示意图转帖在这里,便于参考:        出处:http://blog.youkuaiyun.com/WinGeek/archive/2009/05/05

nGx11的专栏 676

Resource Type

String Resources String     最简单的字符串,可以从程序或者其他资源文件(比如一个XML布局)引用。 Note:字符串是简单的资源,使用它的name属性引用。所以可以在一个XML文件混合String资源和其他简单资源(比如color),在一个元素下面。 使用例子: XML file saved at res/values/strings.xml:

qingziguanjun1的专栏 1618

android contacts 源码分析,Contacts源代码详解

Android 中的Call模块(我们能看到的Call UI),隶属于App层,所以就从sources/packages/apps/Contacts(注意:Call模块并不是定义在apps/Phone 下面)这里开始。我使用的是代号为froyo的Android 2.2的代码。Contacts模块下主要有以下几个文件和目录,附件上简要的说明:+res|-anim (定义的一些动画效果)|- d...

weixin_42510600的博客 844
上一篇: android中文api(85)——HorizontalScrollView
下一篇: android Studio 简单设置
xiaoxiandroid
博客等级 码龄12年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值