android布局优化之<include>标签的使用

1,<include>标签有什么用?

用来重用layout代码.

2,<include>标签该怎么用?

a,新建layout_common_title.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="#00f"
    xmlns:tools="http://schemas.android.com/tools">
    <TextView
        android:id="@+id/tv_back"
        android:layout_width="50dp"
        android:layout_height="50dp" 
        android:background="@drawable/back"/>
    <TextView
        tools:text="标题"
        android:textSize="18sp"
        android:textColor="@android:color/white"
        android:layout_width="wrap_content"
        android:layout_height="match_parent" 
        android:gravity="center"
        android:layout_centerInParent="true"
        android:id="@+id/tv_title"/>
    <TextView
        android:id="@+id/tv_forward"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentRight="true"
        android:background="@drawable/forward"/>
</RelativeLayout>

b,在activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.wangzhichao.demo.MainActivity">

    <include
        android:id="@+id/main_common_title"
        layout="@layout/layout_common_title" />

</RelativeLayout>

c,在MainActivity.java中

public class MainActivity extends Activity {

    private TextView mTvTitle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTvTitle = (TextView) findViewById(R.id.tv_title);
        mTvTitle.setText("标题");
    }
}

d,运行效果


3,<include>标签使用时该注意些什么?

a,在<include>标签下设置的id,会把重用的那个layout的id屏蔽掉

a.1,在layout_common_title.xml中的根节点添加id

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="#00f"
    android:id="@+id/relativelayout_inside"
    xmlns:tools="http://schemas.android.com/tools">
 <!-省略掉一些代码->
</RelativeLayout>
a.2,在MainActivity.java中

public class MainActivity extends Activity {

    private TextView mTvTitle;
    private RelativeLayout mMainCommonTitle;
    private RelativeLayout mRelativeLayoutInside;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTvTitle = (TextView) findViewById(R.id.tv_title);
        mTvTitle.setText("标题");

        mMainCommonTitle = (RelativeLayout) findViewById(R.id.main_common_title);
        mRelativeLayoutInside = (RelativeLayout) findViewById(R.id.relativelayout_inside);
        Log.d("MainActivity", "mMainCommonTitle:" + mMainCommonTitle);
        Log.d("MainActivity", "mRelativeLayoutInside:" + mRelativeLayoutInside);
    }
}

查看日志如下:

06-09 00:53:50.020 6587-6587/? D/MainActivity: mMainCommonTitle:android.widget.RelativeLayout{c15bc58 V.E..... ......ID 0,0-0,0 #7f0b0056 app:id/main_common_title}
06-09 00:53:50.020 6587-6587/? D/MainActivity: mRelativeLayoutInside:null

解决办法:1,根容器id与include id设置相同2,若id不同,那么只设置一个就好了

b.在<include>标签下设置其他属性值的问题

b.1,在使用include标签时,除了使用layout属性加载布局文件时,一般不需要设置其他属性了,也就是使用layout属性就够了.

b.2,有时为了布局的需要,仍要使用诸如layout_margin等除id之外的其他属性,这时就要注意,为了使这些其他属性起作用,必须同时设置include标签的宽高属性.而且只能设置layout_xxx的属性,设置其他属性是不会起作用的.例如,

 <include
        android:id="@+id/main_common_title"
        layout="@layout/layout_common_title"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_alignParentBottom="true" />

运行截图,位置和高度都发生了变化.


b.3,include标签的宽高属性值会覆盖根节点设置的宽高属性值.

解决办法:在<include>标签下设置其他属性,是对layout的根节点属性的重新设置.因为通过layout属性引用的layout都是一样的,而通过设置其他属性才能产生一些变化,这就是不变中的变.

c.<include>标签有个缺点,就是可能产生多余的层级,比如,被复用布局是一个垂直的LinearLayout布局,当以include标签插入到另一个垂直的LinearLayout布局中时,结果就是一个垂直的LinearLayout里包含一个垂直的LinearLayout,这个嵌套的布局并没有实际意义,只会让UI性能变差.这时就可以使用merge标签.

参考资料:

1,http://blog.csdn.net/u011277123/article/details/52774428

2,http://blog.csdn.net/shuqiaoniu/article/details/46013771

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Mybatis中的<include>标签用于在SQL映射文件中引用其他的SQL片段. 可以让我们把常用的SQL片段抽取出来,避免重复编写。使用方式如下: 在映射文件中定义SQL片段: ``` <sql id="columns">id, name, age</sql> ``` 在其他SQL中使用: ``` <select id="selectAll" resultType="com.example.MyClass"> SELECT <include refid="columns"/> FROM my_table </select> ``` 标签属性refid对应的值是定义SQL片段时使用的id, 上面的例子中columns为 refid值. ### 回答2: MyBatis中的<include>标签可以在XML映射文件中实现代码重用和片段复用。通过该标签,可以将一个或多个相同的SQL片段提取出来,然后在不同的地方进行引用,从而减少代码的冗余和重复编写。 <include>标签使用主要包括以下几个步骤: 1. 首先,需要将要重用的SQL片段抽取出来,可以将其定义在XML映射文件中的任何位置。 2. 在需要引用该SQL片段的位置,使用<include>标签进行引用。语法格式为:<include refid="sql片段的id"/>。其中,refid属性用于指定被引用的SQL片段的id。 3. 引用的SQL片段可以定义在同一个XML映射文件中,也可以定义在其他XML映射文件中。如果在其他XML文件中定义了SQL片段,则需要在引用的地方使用命名空间进行引用。例如:<include refid="命名空间.sql片段的id"/>。 4. <include>标签还可以与<where>标签等结合使用,实现动态的SQL拼接,使SQL语句更加灵活和可读。 总的来说,<include>标签是MyBatis中一个非常有用的标签,它能够提高代码的复用性和可读性,减少代码的冗余。通过将常用的SQL片段抽取出来,可以让SQL语句更加清晰和简洁。同时,<include>标签还可以与其他标签结合使用,实现更加灵活和动态的SQL拼接。 ### 回答3: MyBatis是一种开源的持久化框架,可以简化Java应用程序与关系型数据库之间的交互。在MyBatis中,<include>标签用于重用SQL语句片段。 <include>标签可以将已经定义好的SQL片段(即SQL语句的一部分)包含在其他SQL语句中,以达到复用的目的。这在需要多次使用相同的SQL语句片段时非常有用,可以减少代码冗余和维护成本。 使用<include>标签的步骤如下: 1. 定义SQL语句片段:在MyBatis的mapper文件中,可以使用<sql>标签或者<include>标签定义SQL语句的片段,例如: ```xml <sql id="selectFields"> id, name, age </sql> ``` 2. 在其他SQL语句中引用SQL片段:使用<include>标签,将已经定义好的SQL片段引用到其他SQL语句中,例如: ```xml <select id="getUser" resultType="User"> SELECT <include refid="selectFields"/> FROM user WHERE id = #{id} </select> ``` 在这个例子中,<include>标签用于引用了之前定义好的SQL片段"selectFields",从而实现了<include>标签的复用效果。 总结来说,<include>标签可以在MyBatis中实现SQL语句片段的复用,提高了代码的可维护性和重用性。它可以结合其他标签一起使用,如<sql>标签来定义SQL片段,从而进一步提高SQL语句的可读性和简洁性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

willwaywang6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值