Android 布局优化(include使用)

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");
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值