Android布局点滴

一、线性布局(LinearLayout)

1、LinearLayout的布局方式有垂直和水平

linearLayout.setOrientation(LinearLayout.VERTICAL);  // 设置垂直排列
linearLayout.setOrientation(LinearLayout.HORIZONTAL);// 设置水平排列
android:orientation="vertical"   // 垂直排列
android:orientation="horizontal" // 水平排列

android:orientation="vertical",子View使用layout_gravity在垂直方向上的设定无效
android:orientation="horizontal",子View使用layout_gravity在水平方向上的设定无效

2、gravity是针对当前控件里面内容的摆放,如果是容器,则针对的是容器里面子view的摆放;如果是控件,则针对的是控件里面内容的摆放。layout_gravity是指当前控件在父控件里面的摆放位置,不过需要注意的一点是父控件设置的gravity的级别要低于子控件设置的layout_gravity。

3、layout_weight—在LinearLayout布局之中,权重也是一个很重要的属性。简单来说就是按比例来分配控件占用父控件的大小。控件的实际大小 = 控件设定的大小 + (布局剩余的大小) * 布局的比例;布局剩余的大小 = 父布局的大小 - 子布局大小之和。

4、weightSum—LinearLayout有一个权重数量的标记:weightSum。在LinearLayout中没有声明weightSum时,默认的就是各个控件权重的总和。

5、LinearLayout布局的weight(权重)属性,对屏幕适配还是很有帮助。但是在使用LinearLayout的时候也有一个问题,就是当界面比较复杂的时候,需要嵌套多层的 LinearLayout,这样就会降低UI Render的效率(渲染速度),而且如果是listview或者GridView上的 item,效率会更低,另外太多层LinearLayout嵌套会占用更多的系统资源,还有可能引发stackoverflow。

二、相对布局(RelativeLayout)

1、RelativeLayout 是一个以相对位置显示子视图的视图组。每个视图的位置可以指定为相对于同级元素的位置(例如,在另一个视图的左侧或下方)或相对于父级 RelativeLayout 区域的位置(例如在底部、左侧或中心对齐)。

2、RelativeLayout 是一个非常强大的界面设计实用工具,因为它可以消除嵌套视图组并使布局层次结构保持扁平化,从而提高性能。如果您发现自己使用了多个嵌套的 LinearLayout 组,只需用一个 RelativeLayout 就可以替换它们。

三、约束布局(ConstraintLayout)

1、ConstraintLayout 可让您使用扁平视图层次结构(无嵌套视图组)创建复杂的大型布局。它与 RelativeLayout 相似,其中所有的视图均根据同级视图与父布局之间的关系进行布局,但其灵活性要高于 RelativeLayout,并且更易于与 Android Studio 的布局编辑器配合使用。

2、ConstraintLayout  是一个ViewGroup,可以在Api9以上的Android系统使用它,它的出现主要是为了解决布局嵌套过多的问题,以灵活的方式定位和调整小部件。从 Android Studio 2.3 起,官方的模板默认使用 ConstraintLayout

3、ConstraintLayout使用起来比RelativeLayout更灵活,性能更出色!ConstraintLayout可以按照比例约束控件位置和尺寸,能够更好地适配屏幕大小不同的机型。

四、改善布局性能

布局是 Android 应用中直接影响用户体验的关键部分。如果实现不当,您的布局可能会导致应用界面缓慢且需要占用大量内存

1、优化布局层次结构。嵌套过多的布局会降低性能。考虑使用 ConstraintLayout  、RelativeLayout 或 GridLayout 等比较扁平的布局来提高性能。默认的深度上限为 10。

2、通过<include />标签重用布局文件。

3、通过<merge/>标签减少视图层级。<merge/>多用于替换FrameLayout或者当一个布局include另一个布局文件时,<merge/>标签消除视图层次结构中多余的视图组。

4、使用<ViewStub/>按需延迟加载视图。<ViewStub />标签最大的优点是当你需要时才会加载,使用他并不会影响UI初始化时的性能。各种不常用的布局想进度条、显示错误消息等可以使用<ViewStub />标签,以减少内存使用量,加快渲染速度。<ViewStub />是一个不可见的,大小为0的View。

五、布局优化工具

1、Hierarchy Viewer—Hierarchy Viewer是Android自带的一款可视化调试工具,用来检查Layout嵌套及绘制时间。以可视化的布局角度直观获取Layout布局设计和各种属性信息。由于Android安全考虑Hierarchy Viewer只能连接Android开发手机或模拟器。

一个一个view的去分析效率非常低。所以再介绍另外一个工具Lint,用于检查所有页面的层级,并把深度高于N(自定义)的页面输出,然后通过Hierarchy View工具来具体分析。

2、Android Lint 是 Android SDK Tools 16(ADT 16)之后引入的代码检查工具,通过代码静态检查,可以发现潜在的代码问题,并给出优化建议。Android-Lint 检查工具使用的方式有以下两种:命令行使用脚本执行;在 IDE 中使用视图化工具。

Lint 的检查结果分为 6 类:

  • Correctness(正确性)
  • Security(安全性)
  • Performance(性能)
  • Usability(可用性)
  • Accessibility(可达性)
  • 国际化

问题的严重程度(severity)从高到低依次是:

  • Fatal
  • Error
  • Warning
  • Information
  • Ignore

扫描规则和缺陷级别可以在 File→Settings→Editor→Inspections→Android Lint 中配置
在 Android Studio 中启动 Lint,从菜单栏选择 Analyze→Inspect Code,进去后可以指定扫描的范围,可以是整个工程,也可以是一个 Module 或单独的文件。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值