Android布局文件中include标签的使用

在Android的开发中,布局文件可以让我们很方便的对各个UI控件进行界面上的定位和一些属性设置,而在程序中可以直接取得控件的id对它直接进行操作。但是,如果是一个复杂的界面设计,我们把所有布局都放在一个文件中来描述,那这个文件会显得比较臃肿并且结构变得无法清晰了。为此,Android为我们提供了include标签,它可以将已经写好的layout布局文件模块引用到其他的布局文件中。这样的语法可以减少布局文件的臃肿程度,提高布局文件的结构化,使得布局文件简介、结构清晰,提高代码的复用性。

例如:
定义一个布局文件: my_title_layout.xml

    <?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout                             xmlns:android="http://schemas.android.com/apk/res/android"        
            android:layout_width="match_parent"
            android:id="@+id/my_title_parent_id" 
            android:layout_height="wrap_content" >
       <ImageButton 
            android:id="@+id/back_btn"                                                                                                            
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:src="@drawable/ic_launcher"   /> 

       <TextView android:id="@+id/title_tv"    
             android:layout_width="wrap_content" 
             android:layout_height="wrap_content"
             android:layout_centerVertical="true"
             android:layout_marginLeft="20dp"   
             android:layout_toRightOf="@+id/back_btn"
             android:gravity="center" 
             android:text="我的title" 
             android:textSize="18sp" />
      </RelativeLayout> 

引用这个布局文件的方法:

     <?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" > 


        <include 
           android:id="@+id/my_title_ly" 
           android:layout_width="match_parent" 
           android:layout_height="wrap_content" 
           layout="@layout/my_title_layout" /> 

       </LinearLayout>

需要注意的问题:
1.如果同一个Anticity的布局文件中引用了相同的多个layout文件,那么使用FindViewById查找子控件的时候需要通过定义两个View来加以区分。也就是说,这时候应该先找到include标签id所对应的View,然后再在View中查找相应的子控件,否则,如果直接查找,系统总是找到的是第一个子控件,而不能找到其他子控件(这时候这些子控件的id都是相同的)。

例如:
btn.xml:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" >

<Button

android:id="@+id/btn" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="Button">
</Button>
</LinearLayout>

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
> 
<include android:id="@+id/in1" layout="@layout/btn"/> 
<include android:id="@+id/in2" layout="@layout/btn"/> 
<TextView android:id="@+id/tv" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/hello" /> 
</LinearLayout> 

这时候查找id为btn的button需要这么做:
View v1 = (View) findViewById(in1);
Button bt1 = (Button) findViewById(btn);

View v2 = (View) findViewById(in2);
Button bt2 = (Button) findViewById(btn);

如果直接Button bt = (Button)findViewById(btn),则只能找到in1里面的btn。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值