UI适配

换了一份新工作, 从系统开发转为Android应用开发,刚起步从UI开始。


1. 长度的问题

这是我刚开始比较郁闷的,美工给的效果图全部是以px为单位,但是布局上肯定不能用px,要用dp,但是到底多少px=1dp?这个问题不解决,做出来的效果就怪怪的。

这个问题我问了其他开发, 给的结论是看感觉,或者乘以一个固定比例,这个答案总感觉不靠谱。如果有好的方法,欢迎分享。

我的解决方案:简单做了一个测试程序,在需要适配的机器上分别以px和dp为单位,做相同长度的线。看看多少px和dp在视觉上是相同的,从而得出px和dp的换算比例。

最后得出是4px=1dp,就是xxxhdpi。


后来仔细看了google官网,单就长度单位而言, 有ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi 6种情况, 这6种情况下,以dp为单位,物理长度是一样的,区别是像素密度不同,具体的px值不同, 以mdpi的px值为基准(设为x),ldpi为0.75x, hdpi为1.5x,xhdpi为2x, xxhdpi为3x, xxxhdpi为4x。drawable文件夹的后缀就是这个意思,比如在xhdpi的设备上显示一张40*40的图片,对应的drawable-xhdpi中放40*40的图片,drawable-xxxhdpi中放80*80的图片,这样在xxxhdpi的设备上效果就能保持一致,如果没有80*80的这张图,系统会将40*40的图片拉伸成80*80,这样效果就不好看了。


2. ImageView

maxHeight maxWidth这两个属性要生效 adjustViewBounds要置为true

不要把想展示的图片放在background,因为有些属性对background无效

scaleType 属性很有用,fitXY拉伸充满ImageView, fitStart fitCenter fitEnd分别是按原图比例不溢出的情况下居上(居左)、居中、居下(居右),center原图居中显示,可能溢出,centerCrop按原图比例一端溢出一端顶满,centerInside保持比例居中不溢出


3. 布局

单个控件的大小能固定的最好,控件之间的关系用相对布局或者LinearLayout的等比例处理,控件之间的距离尽量不要写死,因为虽然以dp定义的长度在不同的设备上近似相同,但是不同的设备可能总的dp值不同,比如一个宽度有320dp,另一个设备宽度有360dp。

一个水平LinearLayout中的两个控件宽度1:1,但是之间有10dp的间距,则左边控件设置layout_marginRight="5dp" 右边控件设置layout_marginLeft="5dp", 不要在一边设置margin为10dp,否则宽度有问题

类似的布局可以考虑抽象出来,然后在其他布局中include的,如果是类似的控件可以直接考虑抽象成一个fragment,这样当控件布局改变时不用挨着每一个布局文件改一遍(我已经改了好几遍了==!)

RelativeLayout里的控件是可以重叠的,所以可以在底层放ImageView当背景,在上层放ImageView做蒙板


4.values

values 后缀有v19 v14等针对android版本,还有large swXXXdp针对屏幕大小,如果针对不同情况需要数值不一样,在对应values里定义一个属性是必须的。

对于类似风格的文字或控件, 大小和颜色之类的属性都可以统一使用values中定义的值,这样改着方便,比如我要修改所有Activity标题文字的大小。


5.ImageButton

这个返回icon这么小,手指不容易点到,icon小没关系,button可以写的大一些,背景透明,看起来小,实际按钮大


6.SeekBar

这个控件系统自带的有padding,所以进度条不能顶头,但是如果自己把padding置0,虽然顶头了,但是手指很难滑动到最后。


7 sp

sp与px的关系 和 dp与px的关系一样,只不过sp用于设置字体大小。

注意字体大小为20sp的TextView,长宽为wrap_content时,它的长或宽是比20dp大的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值