Android中常用布局单位
Android在UI布局时经常用到一些单位,对单位混用直接会影响UI的显示,要想正确的在布局中使用每种单位就必须先真正的熟悉它。
UI显示效果的影响因素:屏幕尺寸、屏幕密度、分辨率;而android手机种类又比较多,为了适应不同的设备,我们就要注意drawable和layout资源。
常用的单位有:px、dip(dp)、sp,还要一些不常用的单位,如pt、in、mm。
px:对应屏幕上的实际像素点;
dip(dp):设备独立像素,一种基于屏幕密度的抽象单位,在每英寸160点得显示器上,1dip=1px,但随着屏幕密度的改变,dip与px的换算会发生改变。因为不通设备中有不同的显示效果,所以为了解决在不通分辨率手机上运行不至于相差太大的问题,引入了dip计量单位,这种计量单位与移动设备硬件无关。
sp:全名 scaled pixels-best for text size,放大像素(比例像素),与刻度无关,可以根据用户的字体大小首选项进行缩放,主要用来处理字体的大小;
in:英寸(长度单位);
mm:毫米(长度单位);
pt:磅/点,标准的长度单位 ,1/72英寸;
px和dp的换算公式:
px = dp * (density/160)
density 是屏幕密度,表示每英寸有多少个显示点,与分辨率不同.
例如,
在density=240,800px*480px屏幕上,320dp的宽度对应的像素是480px;
在density=160,800px*480px屏幕上,320dp的宽度对应的像素是320px,
所以,
使用dp(sp)能够保证显示质量,但不保证显示尺寸比例;
相反,使用px能够保证显示尺寸比例,但不保证显示效果。
注意:在160dpi屏幕上,px和dp是等价的。
在布局中应该尽量使用dip(dp)作为单位;而定义作为文字大小的单位则推荐使用sp。
drawable资源对布局的影响
手机密度值(Density)表示每英寸有多少个显示点,与手机的分辨率是两个概念,但是分辨率与密度之间又互相关联,两者转换公式为:
密度值是120,屏幕实际分辨率为:240px×400px(两个点对应一个分辨率);
密度值是160,屏幕实际分辨率为:320px×533px(3个点对应两个分辨率);
密度值是240,屏幕实际分辨率为:480px×800px(一个点对应一个分辨率)。
比如,QVGA与WQVGA屏的密度值是120,HVGA屏密度值是160,WVGA屏密度值是240.
res资源目录,因为运行的设备的不同,对应的资源文件目录也不同。其真正的原因是,资源目录是根据密度的不同来进行划分的:
密度值是120,对应的资源目录是drawable-ldpi;
密度值是160,对应的资源目录是drawable-mdpi;
密度值是240,对应的资源目录是drawable-hdpi。
android中的不同资源规格对应的屏幕密度:
hdpi = 240 , 状态栏和标题栏高各19px或者25dip
mdpi = 160 , 状态栏和标题栏高各25px或者25dip
ldpi = 120 , 状态栏和标题栏高各38px或者25dip
系统会根据设备的屏幕密度来选择hdpi, mdpi, ldpi相应的资源,如果没有加标签,则默认为mdpi。
图片资源的放置位置直接影响图片最终显示的大小:
例如drawable-hdpi没有图片,假如现在有一张图片10x10的a.png放在drawable-mdpi,设备屏幕密度为240dpi。
如果在layout描述该图片时使用wrap_content,那么最后图片显示的大小就变成15x15。这是因为系统在drawable-hdpii找不到图片,就在drawable-mdpi找,找到a.png后,根据密度不同,系统自动对图片进行调整,所以就变成了15x15。假如drawable-hdpi有a.png,则不加处理根据其图片大小10x10显示。当然,如果在layout描述该图片时声明宽高都为10px,那么系统无论在什么文件夹下找到图片一般不会影响图片的显示大小(在SeekBar等容器就算指定大小也有可能改变)。
注:部分段落属于摘抄。
Android中常用布局单位的更多相关文章
- Android中常用布局
1.线性布局 LinearLayout orientation:方向:vertical,垂直:horizontal,水平 gravity:对齐方式,子控件相对于当前 ...
- Android 之常用布局
LinearLayout 线性布局. android:orientation="horizontal" 制定线性布局的排列方式 水平 horizontal 垂直 vertical ...
- [安卓基础] 008.Android中的显示单位
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 无废话Android之常见adb指令、电话拨号器、点击事件的4种写法、短信发送器、Android 中各种布局(1)
1.Android是什么 手机设备的软件栈,包括一个完整的操作系统.中间件.关键的应用程序,底层是linux内核,安全管理.内存管理.进程管理.电源管理.硬件驱动 2.Dalvik VM 和 JVM ...
- Android中的布局优化方法
http://blog.csdn.net/rwecho/article/details/8951009 Android开发中的布局很重要吗?那是当然.一切的显示样式都是由这个布局决定的,你说能不重要吗 ...
- Android中得到布局文件对象有三种方式
Android中得到布局文件对象有三种方式 第一种,通过Activity对象 View view = Activity对象.getLayoutInflater().inflater(R.layout. ...
- Android笔记(七) Android中的布局——线性布局
我们的软件是由好多个界面组成的,而每个界面又由N多个控件组成,Android中借助布局来让各个空间有条不紊的摆放在界面上. 可以把布局看作是一个可以放置很多控件的容器,它可以按照一定的规律调整控件的位 ...
- Android中常用的5大布局详述
Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面. 所有的布局方式都可以归类为ViewGroup的 ...
- android中常用的布局管理器
Android中的几种常用的布局,主要介绍内容有: View视图 RelativeLayout 相对布局管理器 LinearLayout 线性布局管理器 FrameLayout ...
随机推荐
- AC日记——奶牛集会 洛谷 P2345
奶牛集会 思路: 把奶牛按照v排序: 然后,每次都把奶牛放入一个集合s: 因为奶牛已经排序: 所以,每次第i次放入奶牛起作用的v就是vi: 每次ans+=(xi*sum-sumxl)*vi+(sumx ...
- J.U.C并发框架源码阅读(十一)DelayQueue
基于版本jdk1.7.0_80 java.util.concurrent.DelayQueue 代码如下 /* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is su ...
- [scrapy] exceptions.TypeError:XXX is not json serializable
原因是spider获取items.py中定义的字段的时候,忘记extract()了 def parseItem(self,response): sel = Selector(response) ite ...
- (3)C#工具箱-容器
容器特点:把控件放到容器里,移动容器控件也会跟着移动. 1.flowLayoutPanel(流布局控件) 放入控件后,会自动垂直或水平排列 拉长布局,控件自动跑到一行 2.GroupBox(组合框) ...
- poj1743(后缀数组)
poj1743 题意 给出一个数字序列(串),现在要去寻找一个满足下列条件的子串: 长度不小于 5 存在重复的子串(如果把一个子串的所有数字都加上或减去一个值,与另一子串的数字对应相同,我们称它们重复 ...
- SQL表操作习题4 14~25题 缺20题
- Intent创建Activity
1,布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...
- PHP的一些陷阱
1,空Array为False $a = array() if($a == false) { echo "This will be printed ! ! !" ; } 持续更新中
- 设计模式之空对象模式(php实现)
github地址:https://github.com/ZQCard/design_pattern /** * 在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象 ...
- lamp+nginx代理+discuz+wordpress+phpmyadmin
实验课题:搭建LAMP,安装Nginx,作为代理,将MySQL安装在单独的机器,apache负责动态,nginx负责静态 实验环境: 1.VMware Workstation 11 2.设备A:MyS ...