include使得xml可以重用
首先先建立一个要重用的xml :pic_include.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="@string/jsx"/>
<ImageView
android:id="@+id/pic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/jinsixiong"
/>
</LinearLayout>
这个xml,上面是文字说明下面是图片
然后在activity的布局中引用
activity_main.xml中
<include
layout="@layout/pic_include"
android:layout_width="100dp"
android:layout_height="100dp"
/>
很方便就可以重用了
如果一个布局在多个页面中都要用,就可以将其抽取出来类似于工具类,用include调用
几个注意的地方
调用与@+id重复
首先我们如果想改pic_include.xml中的textview中内容怎么办呢
(我们如何取到include中的控件)
//直接用
textView1=(TextView) findViewById(R.id.text1);
直接就可以调用到这个textview中的方法了
使用include时候如果我们不加注意会导致@+id重复
如果在一个xml中as会自动提醒我们这个android:id=”@+id/text1”是重复的(报错)
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:clickable="true"/>
<ImageView
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
但是如果我们是这样用
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:clickable="true"/>
<include
android:id="@+id/jsx"
layout="@layout/pic_include"
android:layout_width="100dp"
android:layout_height="100dp"
/>
<include
android:id="@+id/keji"
layout="@layout/pic_include"
android:layout_width="100dp"
android:layout_height="100dp"
/>
main.xml 中和两个include中都有这个text1怎么办呢?
我们要修改这个textview的文字
textView1=(TextView) findViewById(R.id.text1);
textView1.setText("我不是熊");
运行起来程序不但不报错,而且将main.xml中的text1修改了
但是注意include中的text1并没有修改,也就是findviewbyid只是通过id找到了一个
实例所以我们要注意@+id
其实在一个xml中如果我们加了两个一样的include就会变得十分麻烦,如果我们要修改第二个
android:id=”@+id/keji”中的textview
<include
android:id="@+id/jsx"
layout="@layout/pic_include"
android:layout_width="100dp"
android:layout_height="100dp"
/>
<include
android:id="@+id/keji"
layout="@layout/pic_include"
android:layout_width="100dp"
android:layout_height="100dp"
/>
我们需要这样
//通过id找到include
LinearLayout l=(LinearLayout)findViewById(R.id.keji);
//找到include中的textview
TextView t=(TextView)l.findViewById(R.id.text1);
//更新
t.setText("kejjj");