Android显示单元--像素、分辨率、颜色
1.像素
老子曾说“天下难事必作于易,天下大事必作于细”,Android开发也是一样,再复杂的App也无非就是数百万个像素点的排列组合。像素虽然看似简单,但是里面大有学问。如果在开发时对像素单位不以为然仅仅一根筋的填数字,最后在模拟器上取得很好效果的界面在真机上也可能东倒西歪,这就是没打好基础的缘故。接下来通过介绍像素的基本概念及单位间的相互转化来进一步理解像素。
Android支持的像素单位有px、in、mm、dp、sp等。其中,px是手机屏幕上可显示的最小的单位,它与物理设备的显示屏有关。dp与物理设备无关,只与屏幕的尺寸有关,一般来说,同样尺寸的屏幕以dp计算的分辨率是一样的。sp的原理跟dp差不多,专门用于设置字体大小,通过sp设置的字体可以在系统设置字体大小(小、普通、大、超大)时有不同的显示效果。
dp和px的联系取决于具体设备上的像素密度,像素密度就是DisplayMetries里的density参数,当density=1.0时代表1dp=1px,当density=1.5时代表2dp=3px。具体的转换函数如下:
//根据手机的分辨率从dp单位转换成px单位
public static int dip2px(Context context,float dpValue){
//获取当前手机的像素密度
final float scale=context.getResources().getDisplayMetrics().density;
return (int)(dpValue*scale+0.5f); //四舍五入取整
} //根据手机的分辨率从px单位转换成dp单位
public static int px2dip(Context context,float pxValue){
//获取当前手机的像素密度
final float scale=context.getResources().getDisplayMetrics().density;
return (int)(pxValue/scale+0.5f); //四舍五入取整
}
我们可以将以上转换函数封装到一个工具类中,方便以后使用
在xml布局文件中,为了让不同设备屏幕拥有统一的显示效果,除了sp用于设置文字大小外,其余要用尺寸的地方都用dp,在代码中的情况又有所不同,Android用于设置大小的函数都是以px为单位,无论是LayoutParams里的width和height,还是setMargins和setPadding,参数单位都是px,要想在代码中设置布局大小或间距,得先把dp值转换成px值,代码应用如下:
//将10dp对应的尺寸大小转换为对应的px数值
int dip_10=Utils.dip2px(this,10L);
//从布局文件中获取名叫tv_padding的文本视图
TextView tv_padding=findViewById(R.id.tv_padding);
//设置该文本视图的内部文字与控件四周的间隔大小
tv_padding.setPadding(dip_10,dip_10,dip_10,dip_10);
2.屏幕分辨率
在APP代码中时常要取手机的屏幕分辨率(当前屏幕的宽和高),然后动态调整界面上的布局。在代码中获取分辨率就是获取DisplayMetrics对象,然后从该对象中获得宽、高、像素密度等信息。下面是DisplayMetrics类的常用属性说明:
·widthPixels:以px为单位计量的宽度值
·heightPixels:以px为单位计量的高度值
·density:像素密度,即一个dp单位包含多少个px单位
下面是获取当前屏幕的宽度、高度的示例,像素密度的获取上面代码已经给出,不再重复
public static int getScreenWidth(Context context){
//从系统服务中获取窗口管理器
WindowManager windowManager=(WindowManager)context.getSystemService(context.WINDOW_SERVICE);
DisplayMetrics displayMetrics=new DisplayMetrics();
//从默认显示器中获取显示参数保存到displayMetrics对象中
windowManager.getDefaultDisplay().getMetrics(displayMetrics);
return displayMetrics.widthPixels; //返回屏幕的宽度数值
} public static int getScreenHeight(Context context){
//从系统服务中获取窗口管理器
WindowManager windowManager=(WindowManager)context.getSystemService(context.WINDOW_SERVICE);
DisplayMetrics displayMetrics=new DisplayMetrics();
//从默认显示器中获取显示参数保存到displayMetrics对象中
windowManager.getDefaultDisplay().getMetrics(displayMetrics);
return displayMetrics.heightPixels; //返回屏幕的高度数值
}
在接入设备上获得分辨率信息显示如下:
3.颜色
在Android中,颜色值由透明度alpha和RGB三原色定义,有八位十六进制和六位十六进制两种编码,其中需要注意的是,六位十六进制编码有两种情况,在XML文件中默认不透明(透明度为FF),在代码中默认透明(透明度为00),下面的代码分别给两个文本控件设置六位编码和八位编码的背景色。
TextView tv2= (TextView) findViewById(R.id.tv2);
tv2.setBackgroundColor(0x00ff00);
TextView tv3= (TextView) findViewById(R.id.tv3);
tv3.setBackgroundColor(0xff00ff00);
可以看到,代码使用六位编码看不到任何背景,使用八位编码能看到正确的绿色背景。
所以代码中一般不用六位编码,因为使用了和不使用没什么区别。
Android显示单元--像素、分辨率、颜色的更多相关文章
- Android学习路径(四)文件项目学习的名单,android显示单元经常使用的
1.的该项目文件所谓名单AndroidManifest.xml文件.该文件,但有很大的利用,例:app名字.图标,app支持的版本app等等.以下我就介绍下这个清单文件的各个參数的作用. <ma ...
- DLP显示单元(威创)
品牌:威创型号:E-SX675生产商:广东威创视讯科技股份有限公司1.生厂商简介(1)生产商概述广东威创视讯科技股份有限公司(简称威创)成立于2002年,专业从事大屏幕拼接显示产品及其解决方案的研发. ...
- android DisplayMetrics 获取屏幕分辨率
Android 提供DisplayMetircs 类可以很方便的获取分辨率.下面介绍 DisplayMetics 类: Andorid.util 包下的DisplayMetrics 类提供了一种关于显 ...
- 像素,分辨率,PPI(像素密度),BPP 扫盲
像素于分辨率 像素,又称画素,为图像显示的基本单位,译自英文“pixel”,pix是英语单词picture的常用简写,加上英语单词“元素”element,就得到pixel,故“像素”表示“图像元素”之 ...
- 说明位图,矢量图,像素,分辨率,PPI,DPI?
说明位图,矢量图,像素,分辨率,PPI,DPI? 显示全部 关注者 28 被浏览 7,031 关注问题写回答 邀请回答 添加评论 分享 2 个回答 默认排序 刘凯 21 人赞同了 ...
- DevExpress控件-GridControl根据条件改变单元格/行颜色--转载
DevExpress控件-数据控件GridControl,有时我们需要根据特定条件改变符合条件的行或者单元格颜色达到突出显示目的,现在动起鼠标跟我一起操作吧,对的,要达到这个目的您甚至都不用动键盘. ...
- CxGrid 改变某行或单元格的颜色
CxGrid 改变某行或单元格的颜色 一个表(T)的结构结构如下. ID Test 1 20012 14443 17885 26456 4568 cxGrid成功连接到该表, 如果要实现单元格特效 ...
- Android Studio 修改Logcat的颜色
在Android Studio里面默认的logcat显示颜色是灰色的,不同等级的log是没有颜色分别的,如图 这一点远不如Eclipse好看,但是Android Studio的logcat的颜色其实也 ...
- DevExpress控件-GridControl根据条件改变单元格/行颜色(Dev GridControl 单元格着色) z
DevExpress控件-数据控件GridControl,有时我们需要根据特定条件改变符合条件的行或者单元格颜色达到突出显示目的,现在动起鼠标跟我一起操作吧,对的,要达到这个目的您甚至都不用动键盘. ...
随机推荐
- POJ_3663_贪心
题目描述: 给你一堆数和一个限定的空间大小,要求求出两个数的和小于等于空间大小的对数. 思路: 贪心,先给一堆数从大到小排序. 第一个数取数组第一个,第二个数从第二个开始依次往后取,只要某个第二个数满 ...
- 登录sql sever
MSSQLSEVER是默认的实例名,一台计算机可以安装多个实例名,相当于多个服务器,互不影响. workbench是MySQL 服务器的一个图形化管理客户端,功能类似于MySQL Command 安装 ...
- Standby Redo Logs的前世今生与最佳实践
编辑手记:使用过Data Guard的人应该对于Standby Redo Logs都不陌生,在配置了 Standby Redo Logs的standby中,能够进行日志的实时应用,同时Standby ...
- Mac-Mysql忘记root密码
cd /usr/local/mysql/bin 切换到root权限 ,需要输入密码: sudo su 输入之后会看见如下信息: sh-3.2# 使用如下命令以安全模式运行mysql ./mysqld_ ...
- Params:params 关键字可以指定在参数数目可变处采用参数的方法参数。
Params:params 关键字可以指定在参数数目可变处采用参数的方法参数. 注意点: 1.一个方法中只能使用一个params来声明不定长参数数组: 2.params参数数组只能放在已定义参数后面 ...
- 【算法总结】图论/dp-动态规划 大总结
写于一只蹲在角落的蒟蒻-Z__X... 2020.2.7,图论和 \(dp\) 终于告一段落.蓦然回首,好似已走过许多...不曾细细品味,太多太多又绵延不断地向我涌来... 谨以此纪念 逝去 的图论和 ...
- vim 快捷键方式
https://juejin.im/post/5ab1275d5188255588053e70#heading-14 安装方式 https://juejin.im/entry/57b281f72e95 ...
- 【POJ - 3186】Treats for the Cows (区间dp)
Treats for the Cows 先搬中文 Descriptions: 给你n个数字v(1),v(2),...,v(n-1),v(n),每次你可以取出最左端的数字或者取出最右端的数字,一共取n次 ...
- 升级了NinjaLoveFish Excel量化表格
为了方便查看均价和止盈值,新建了两列 这样做的好处就是,针对一个股票,可以实现不同的多个网格布局,然后分别实现各自的盈利设定. 例如这是网格1 那么同时也可以存在网格2 就可以实现多个网格布局到一个股 ...
- 正规式与正规集,DFA与NFA
词法分析器的设计 词法分析器的功能:输入源程序.输出单词符号 词法分析器的设计:给出程序设计语言的单词规范--单词表, 对照单词表设计识别该语言所有单词的状态转换图, 根据状态转换图编写词法分析程序 ...