技术标签: java代码dx2dip
1、概述
过去,程序员通常以像素为单位设计计算机用户界面。例如:图片大小为80×32像素。这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面会显得很小。在有些情况下,用户界面可能会小到难以看清内容。由此我们采用与分辨率无关的度量单位来开发程序就能够解决这个问题。Android应用开发支持不同的度量单位。
2、度量单位含义
dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
dp: dip是一样的
px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。
pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;
sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。
in(英寸):长度单位。
mm(毫米):长度单位。
3、度量单位的换算公式
在android源码包TypedValue.java中,我们看如下函数:
复制代码 代码如下:
public static float applyDimension(int unit, float value,
DisplayMetrics metrics)
{
switch (unit) {
case COMPLEX_UNIT_PX:
return value;
case COMPLEX_UNIT_DIP:
return value * metrics.density;
case COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f/72);
case COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f/25.4f);
}
return 0;
}
该函数功能:是把各单位换算为像素。
metrics.density:默认值为DENSITY_DEVICE / (float) DENSITY_DEFAULT;
metrics.scaledDensity:默认值为DENSITY_DEVICE / (float) DENSITY_DEFAULT;
metrics.xdpi:默认值为DENSITY_DEVICE;
DENSITY_DEVICE:为屏幕密度
DENSITY_DEFAULT:默认值为160
4、屏幕密度:表示每英寸有多少个显示点,与分辨率是两个不同的概念。
Android主要有以下几种屏:如下表
幕
Tyep
宽度
Pixels
高度
Pixels
尺寸
Range(inches)
屏幕密度
QVGA
240
320
2.6-3.0
low
WQVGA
240
400
3.2-3.5
low
FWQVGA
240
432
3.5-3.8
low
HVGA
320
480
3.0-3.5
Medium
WVGA
480
800
3.3-4.0
High
FWVGA
480
854
3.5-4.0
High
WVGA
480
800
4.8-5.5
Medium
FWVGA
480
854
5.0-5.8
Medium
备注
目前android默认的low=120 ;Medium =160; High = 240
5、综上所述 据px = dip * density / 160,则当屏幕密度为160时,px = dip 根据 google 的建议,TextView 的字号最好使用 sp 做单位,而且查看TextView的源码可知Android默认使用sp作为字号单位。将dip作为其他元素的单位。
文章浏览阅读4k次。在安装StarUML时,提示“依赖关系不满足libgcrypt11>=1.4.5”解决方法如下: 在终端输入:wget http://mirrors.kernel.org/ubuntu/pool/main/libg/libgcrypt11/libgcrypt11_1.5.3-2ubuntu4.2_amd64.debsudo dpkg -i libgcrypt11_1.5.3-2ubuntu4.2_依赖关系不满足libconf-2-4
文章浏览阅读7.6k次,点赞3次,收藏13次。点击上方“五分钟学算法”,选择“星标”公众号重磅干货,第一时间送达链接:https://www.zhihu.com/question/32019460转自 深度学习与计算机视觉公众号声明..._leetcode100题什么水平
文章浏览阅读645次。一.前端发送验证码的准备工作1.点击发送验证码按钮之后,按钮倒计时功能的实现 <!--buttom标签在from表单内部,默认提交时summmit提交(写一个type属性),单独在外面才是一个普通按钮--> <button class="btn" v-html="htmlValue" type="button" :disabled="disabled" href="javascript:void(0);" @click="sendMobileCode" id="se_labview编程给手机发验证码
文章浏览阅读507次。【代码】Vue3 highCharts 3D。_highcharts3d安装
文章浏览阅读601次。中可以使用下面的方法来方便建立三种模板加载。(每种方法都会在其内部新建一个模板加载器对象,然后创建。SpringBoot pdf打印及预览(openhtmltopdf+freemarker)_springboot打印pdf文件
文章浏览阅读1.3w次,点赞14次,收藏69次。算法 求二叉树根节点到指定节点的路径@author:Jingdai@date:2020.11.05题目描述给你一个棵二叉树,再给你一个指定的节点,求根节点到指定节点的路径。如图,比如让你求到 4 节点的路径,则应该返回的路径为 [0, 1, 4] 。思路利用二叉树的先序遍历,寻找指定的节点,同时用一个栈 stack 记录遍历到的节点,当找到需要的节点后立即返回结果。但是这样有一个问题,就是在遍历中 stack 记录的路径中包含一些其他的节点,比如要求上图中到 4 节点的路径,则遍历到 4_二叉树根节点到目标节点路径
文章浏览阅读3.6k次,点赞4次,收藏11次。QT中Ui文件运行中文显示乱码处理办法_ui->btn_open_serial->settext("打开串口"); 汉字乱码
文章浏览阅读98次。$ make && make installgcc -pthread -c -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -I./Include -DPy_BUILD_CORE -o Modules/python.o ./Modules/python.cgcc -pthread -c -DNDEBUG -..._objects/bytes_methods.c',
文章浏览阅读1k次。选择最可读、最容易维护的。仅仅因为你可以用一行字写出来并不意味着你应该写出来。您现有的解决方案与我使用iteritems跳过值查找之外的解决方案很接近,如果我可以避免使用嵌套ifs,我讨厌它们:for key, val in d.iteritems():if filter_string not in key:continue# do something然而,如果你真的想要一些东西让你遍历一个过滤的..._python 字典包含某个键 较大 字典
文章浏览阅读1.9k次。最近做一个项目遇到一个问题,就是在silverlight做的bingmap上有几个maplayer,每个maplayer上都有一个右键菜单contextmenu,然后出现问题,每次只有上层的contextmenu响应,下层的不是不显示就是只显示一次,经过搜索,大体了解是什么原因了先来了解下什么是WPF里的路由事件我们创建一个WPF应用程序,代码如下: xmln_silverlight splitbutton contextmenu 位移
文章浏览阅读563次,点赞8次,收藏2次。使用 SQL 创建数据库是一个非常简单的过程,只需要记住 “CREATE DATABASE” 这个简单的语句。另外,我们也学习了如何查看所有数据库以及如何删除数据库。希望这篇文章能帮助到你,让你更加了解如何使用 SQL。
文章浏览阅读8.6k次。上周参加了ICME2016国际会议,做了presentation,也了解到了很多多媒体领域的学术动态和前沿科技,在这里整理分享给大家,希望大家有机会也多多参加这些优秀的会议,在开会的城市游玩之余也是能有很多收获的。会议简介ICME,全称International Conference on Multimedia and Expo,即国际多媒体与博览会议,又IEEE 计算机学会、电路与系统学..._2016international conference on multimedia and expo