Android最佳实践性能(三)提高性能布局(再利用布局与<include/>')

来源:互联网 发布:加拿大研究生留学 知乎 编辑:程序博客网 时间:2024/05/18 00:21

再利用布局与<include/>'的

上一课下一课

这节课教你

  1. 创建一个可重复使用的布局
  2. 使用<include>标记
  3. 使用<merge>标签

你也应该阅读

  • 布局资源

尽管Android提供了多种部件提供小和可重复使用的互动元素,您可能还需要重新使用需要的特殊布局更大的组件。为了有效地重复使用完整的布局,您可以使用<include/>'的<merge/>标签嵌入当前布局内的另一个布局。

重用布局是特别强大,因为它允许你创建可重用的复杂的布局。举例来说,一个是/否按钮面板,或自定义进度条的说明文字。这也意味着您的应用程序是通用的多种布局的任何元素可以被提取出来,单独管理,然后包括在每个布局。因此,尽管你可以通过编写自定义创建单独的UI组件视图中,您可以更轻松地重新使用布局文件做到这一点。

创建一个可重复使用的布局


如果你已经知道你想要重新使用的布局,创建一个新的XML文件并定义布局。例如,下面是来自G-肯尼亚codelab定义将包括在每个活动(标题栏的布局titlebar.xml):

<FrameLayout  xmlns:android = "http://schemas.android.com/apk/res/android"     android:layout_width = ”match_parent”     android:layout_height = "wrap_content"     android:background = "@color/titlebar_bg" >     <ImageView  android:layout_width = "wrap_content"                android:layout_height = "wrap_content"                 android:src = "@drawable/gafricalogo"  /> </FrameLayout>

视图应该正是你喜欢的方式出现在每个布局向其中添加此布局。

使用<include>标记


里面要添加可重用的组件,添加布局<include/>'的标签。例如,下面是来自G-肯尼亚codelab,其中包括来自上方的标题栏的布局:

这里的布局文件:

<LinearLayout  xmlns:android = "http://schemas.android.com/apk/res/android"     android:orientation = "vertical"      android:layout_width = ”match_parent”     android:layout_height = ”match_parent”     android:background = "@color/app_bg"     android:gravity = "center_horizontal" >     <include  layout = "@layout/titlebar" />     <TextView  android:layout_width = ”match_parent”               android:layout_height = "wrap_content"               android:text = "@string/hello"               android:padding = "10dp"  />     ... </LinearLayout>

您也可以覆盖所有的布局参数(任何机器人:layout_ *属性)通过在指定它们所包含的布局的根视图<include/>'的标签。例如:

<include  android:id = ”@+id/news_title”          android:layout_width = ”match_parent”          android:layout_height = ”match_parent”          layout = ”@layout/title” />

不过,如果你想覆盖使用布局属性的<include>标签,必须覆盖两个 机器人:layout_height机器人:layout_width为了让其他布局属性才能生效。

使用<merge>标签


<merge />标签有助于消除在你的视图层次冗余视图组中的另一个包括一个布局的时候。例如,如果你的主要布局是一个垂直的LinearLayout,其中两个连续的意见,可以被重新使用多种布局,然后重复使用的布局,其中放置两种观点都需要自己的根视图。然而,使用另一个的LinearLayout作为根的可重复使用的布局将导致垂直的LinearLayout内的垂直的LinearLayout。嵌套的LinearLayout 供应,而不是减慢你的UI性能等没有什么实际意义。

为了避免包括这种冗余视图组,您可以改用 <merge>元素作为可重复使用的布局根视图。例如:

<merge  xmlns:android = "http://schemas.android.com/apk/res/android" >     <Button         android:layout_width = "fill_parent"          android:layout_height = "wrap_content"         android:text = "@string/add" />     <Button         android:layout_width = "fill_parent"          android:layout_height = "wrap_content"         android:text = "@string/delete" /> </merge>

现在,当你有这种布局在其他布局(使用<include/>'的标签),系统会忽略<merge>元素,并直接放置在布局的两个按钮,代替的<include/>'的标签。



0 0
原创粉丝点击