• android include标签的使用,在RelativeLayout中使用include标签需注意!!!!!


    转:http://4265337.blog.163.com/blog/static/195375820127935731114/

    include和merge标记的作用主要是为了解决layout的重用问题。

    比如我们有三四个Activity但是他们都要用到同一个样式的标题栏,虽然我们把一样的代码copy个三四遍也没关系,但实在是太丑了,而且效率太低,如果这个标题栏要改样式,你岂不是要去三四个地方分别改动。

    为了解决这个问题,android中有了include和merge标记

    以下为标题栏的layout文件titlebar.xml  我们将使用Include标记重用这个文件

    <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="http://4265337.blog.163.com/blog/@drawable/gafricalogo" />
    </FrameLayout>

    那么在那三四个activity中你可以适用Include标记

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width=”match_parent”
        android:layout_height=”match_parent”
        android:gravity="center_horizontal">

        <include layout="@layout/titlebar"/>  

        <TextView android:layout_width=”match_parent”
                  android:layout_height="wrap_content"
                  android:text="@string/hello" />

        ...

    </LinearLayout>

    调用了Include之后,titlebar文件的内容就被完全嵌入到了include所指定的位置。而且你还可以在include中重新更改一些属性的值,比如

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

             layout="@layout/title"/>
    原来layout中的wrap_content属性就被改成了match_parent属性

    再来说一下merge标记

    上面的include有一个副作用就是他多套了一层root节点FrameLayout ,使得再构图的时候会多花费一点时间

    如果你不能容忍这个的话那你可以试一下merge标记

    titlebar2.xml

    <merge xmlns:android="http://schemas.android.com/apk/res/android">

        <ImageView android:layout_width="wrap_content"
                android:layout_height="wrap_content" 
                android:src="http://4265337.blog.163.com/blog/@drawable/gafricalogo" />

    </merge>

    这样行成的titlebar2文件就少了外层的root节点,merge标记可以直接成为root节点,当titlebar2被include到文件中时,merge标记就会被忽略掉,而直接由里面的ImageView取代原来include的位置。避免了冗余的layout。

    所以include和merge是配合使用的,不是一个互斥的或者说是平级的关系。

     

    再来说一个在使用这两个标签时最容易出现的问题。

    经常会有同学在RelativeLayout中使用include标签

    但是却发现include进来的控件无法用layout_alignParentBottom="true"之类的标签来调整。这个真的非常恼火。其实解决方法非常简单,只要你在include的时候同时重载下layout_width和layout_height这两个标签就可以了。如果不重载,任何针对include的layout调整都是无效的!

  • 相关阅读:
    Gradle更小、更快构建APP的奇淫技巧
    一篇文章让你了解Android各个版本的历程
    快速开发android,离不开这10个优秀的开源项目
    .net 使用AjaxControlToolkit.dll 遇到的"Sys"未定义问题
    ajax xmlhttp下open方法POST、GET参数的区别
    ArrayList 类和List<T>泛型类
    LINQ to SQL
    StudioStyle 使用 厌倦了默认的Visutal Studio样式了,到这里找一个酷的试试
    C#中byte[]与string的转换
    c#中的interface abstract与virtual
  • 原文地址:https://www.cnblogs.com/xingfuzzhd/p/3284583.html
Copyright © 2020-2023  润新知