Android布局文件,include使用之后,你真的了解吗?


目录

  1. 什么是include
  2. 为什么使用include
  3. 怎么使用include
    1. 步骤
    2. Sample
      1. 定义共通布局
      2. 在想要引入的布局中引入
      3. 运行效果
  4. include之后,布局变成了什么样?
    1. 当我们include两个同样的布局时
    2. include两个相同的布局时,如果区别?
      1. include之后,使用新的id区分
      2. 这时通过include时指定的id来获取View
      3. 此时运行时布局实际结构?

1. 什么是include?

include就是在一个布局中,导入另一个布局

2. 为什么使用include?

相同的页面只需要写一次,在需要的地方include即可,提高了共通布局的复用性。

3. 怎么使用include

3.1 步骤

  1. 定义共通布局
  2. include共通布局

3.2 Sample

3.2.1 定义共通布局:include_layout.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/include_lay"
    android:clickable="true"
    android:focusable="true"
    >
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="这是文字"
        android:padding="16dp"
        android:background="@color/colorAccent"
        android:clickable="false"
        android:focusable="false"
        android:layout_marginBottom="10dp"
        />
LinearLayout>

3.2.2 在想要引入的布局中引入activity_include.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >
    <include layout="@layout/include_layout"/>
LinearLayout>

3.2.3 运行效果:

Android布局文件,include使用之后,你真的了解吗?_第1张图片

4 include之后,布局变成了什么样?

  1. include布局伪代码

    <LinearLayout>
        <include layout="@layout/include_layout"/>
    LinearLayout>
  2. 运行时,布局实际结构

    <LinearLayout>
        <LinearLayout id="include_lay">
            <TextView/>
        LinearLayout>
    LinearLayout>

4.1 当我们include两个同样的布局时

如果想要获取idinclude_lay的控件实际上为第一个idinclude_lay的控件,

  1. include的布局伪代码:

    <LinearLayout>
        <include layout="@layout/include_layout"/>
       <include layout="@layout/include_layout"/>     
    LinearLayout>
  2. 运行时布局实际结构

    <LinearLayout>
        <LinearLayout id="include_lay">
            <TextView/>
        LinearLayout>
        <LinearLayout id="include_lay">
            <TextView/>
        LinearLayout>
    LinearLayout>
    

    看图说话:

    Android布局文件,include使用之后,你真的了解吗?_第2张图片

此时如果,通过findViewById(R.id.include_lay)获取控件并设置点击事件,则第一个点击时响应,第二个不响应

4.2 当include两个相同的布局时,如果区别?

可以在include时指定一个新的id,用来区别。

4.2.1 include之后,使用新的id区分

<LinearLayout>
    <include layout="@layout/include_layout"
        android:id="@+id/include_lay_1"/>
   <include layout="@layout/include_layout"
        android:id="@+id/include_lay_2"/>     
LinearLayout>

4.2.2 这时通过include时指定的id来获取View,就是对应的LinearLayout

LinearLayout include1 = findViewById(R.id.include_lay_1);
LinearLayout include2 = findViewById(R.id.include_lay_2);

4.2.3 此时运行时布局实际结构?

<LinearLayout>
    <LinearLayout id="include_lay_1">
        <TextView   />
    LinearLayout>
    <LinearLayout id="include_lay_2">
        <TextView />
    LinearLayout>
LinearLayout>

看图说话:

Android布局文件,include使用之后,你真的了解吗?_第3张图片

相当于将原来的指定的id冲掉,又指定了新的id



推荐视频教程:

Android从整体到局部系列视频教程戳我

广告:

我使用的装备备:程序员必备 | 不伤关节 | 手感好 | 静电容 | Plum键盘|Niz键盘 戳我


你可能感兴趣的:(Android开发系列)