Android 程序优化 - 界面布局


界面布局及优化
Android中常用的布局类:
FrameLayout,LinearLayout,RelativeLayout,GridLayout(4.0 Level14中引入),TableLayout,AbsoluteLayout
PS:网格布局在布局管理器中属于最灵活的一种,通过layout_rowSpan,layout_columnSpan,layout_gravity("fill","fill_horizontal"...)等可以进行行或者列上的延生,从而创建出复杂的布局。结合使用网格布局以及线性布局可以替代相对布局,所以出于性能上的考虑,优先使用网格布局而不是布局嵌套。
     填充布局是一个巨大的开销,额外的嵌套布局和他包含的View会直接影响程序的性能和响应能力。
     使用merge标签,当包含有merge标签的布局被include到另一个页面布局时,该布局的merge节点会被删除,该布局的子View会被直接添加到父布局中。故而结合使用merge及include标签可以创建灵活的可复用的布局定义,避免创建深度嵌套的布局结构,从而提高性能及响应能力。另外,使用tools>hierarchy.bat工具可查看当前UI的结构视图。
     这里要注意的是:merge标签只能作为布局根节点,替换Framelayout;如果在代码中inflate(resource, root, attachToRoot)需将boolean attachToRoot设为true。
<?xml version= "1.0" encoding ="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android" >

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:text="@string/hello_world" />
</merge>

     前面提到填充每个额外的view都需要花费时间和资源,故布局包含view的个数不应超过80个,如果超过,填充布局花费的时间将成为一个显著问题。
     使用Viewstub(惰性加载控件)可以延迟加载,viewstub是一个轻量级的view,在布局中不占用任何控件,也不参加布局的计算与绘制(又叫渲染),可以理解为控件树上的一个占位符,当需要的时候执行相关代码,将其渲染到界面上。我们可以为viewstub指定一个布局,当inflate页面时,viewstub只是被初始化,仅当在代码中使用inflate()方法或者setVisibility可见的时候,viewstub所指向的布局会被inflate和实例化。然而,viewstub不是万能的:
     1 viewstub对象只能被inflate一次(即只能findviewbyId一次),之后则会被置空;
     2 viewstub只能用来inflate一个布局,而不是某个具体的view(当然可以把这个view写在布局文件中);
     3 viewstub适用于需要根据动态条件来判断是否显示某一块布局,到需要显示的地方进行加载。
<ViewStub
        android:id="@+id/view_stub"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:inflatedId="@+id/view_stub_tv"
        android:layout="@layout/textview" />
View stub = (ViewStub) findViewById(R.id.view_stub);
stub.setVisibility(View.VISIBLE);
inflatedId:设置加载后的布局对应的id,通过这个id可以找到布局内容,及控件的引用,需在viewstub inflate之后才可执行此操作,否则为空。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值