编程的世界有的时候很微妙,有的时候就好像是在解决一个哲学问题,Android开发的时候,所有的布局,颜色,等(其实这些都可以称之为资源,Android中的资源是指非代码部分,如图片、音频、视频、字符等资源,其实就是可以被代码所操作的一些对象)都可以用XML文件布局,而所有对这些XML的操作可以在相应的Activity中进行,这种分离似乎将程序员和美工进行分离。

一个系统中,往往会有重复的界面,或者被划分的可以复用的逻辑单元,这个时候的解决方法往往是,做好一个之后,然后进行Copy。android中提供了一个include标签也可以用来解决复用问题。

include标签用法。1.新建一个xml文件,命名 head.xmlhead.xml文件内容如下:<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"                android:id="@+id/index_linear_foot"android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal">        <ImageView            android:id="@+id/head_btn_refresh"            android:layout_width="wrap_content"            android:layout_height="wrap_content"        /></RelativeLayout>2.新建一个布局文件,命名 main.xmlmain.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:layout_width="fill_parent" android:layout_height="wrap_content" layout="@layout/head" /></LinearLayout>注意:上面我们的include标签中是没有为它指定id的。3.新建一个MainActivity,设置布局文件为main.xml;4.假设我现在需要在代码中为head.xml中的RelativeLayout容器设置背景图片。代码如下:
//获得布局容器对象RelativeLayout head = (RelativeLayout)findViewById(R.id.index_linear_foot);//设置背景图片head.setBackgroundResource(R.drawable.head);这样就OK了。5.上面说过,我们的include标签中是没有为它指定id的,假设我们现在的main.xml文件布局容器是RelativeLayout,而我需要把某个控件放在head.xml下面。但是如果给inlclude设置了id标签,那么上面的代码就运行失败。

<!-- include标签内设置id属性后(android:id),其引用的布局layout内的id属性就不起作用了,需要先获取该布局文件,然后通过该布局文件获取里面的对象-->

将main.xml文件变成如下:<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    ><include android:id="@+id/main_head" android:layout_width="fill_parent" android:layout_height="wrap_content" layout="@layout/head" /><ListViewandroid:id="@+id/listview"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_below="@+id/main_headb"/></RelativeLayout>那接下来我们在运行我们的实例,结果发现,代码在运行到head.setBackgroundResource(R.drawable.head);这一句的时候抛异常了java.lang.NullPointerException原来:如果include指定了id的话,就不能直接把它里面的控件当成主xml中的控件来直接获得了,必须先获得这个xml布局文件,再通过布局文件findViewById来获得其子控件。代码如下。View layout = getLayoutInflater().inflate(R.layout.head, null);RelativeLayout head= (RelativeLayout)layout.findViewById(R.id.index_linear_foot);//设置背景图片head.setBackgroundResource(R.drawable.head);

  

在使用了Relativelayout布局,并在该布局中用到了include标签如果没有同时重载layout_width和layout_height属性,
其它的layout_*属性会被忽略掉,除非同时重载了这两个属性。
还有一种方法就是利用LinearLayout包装下。

  参考 :http://blog.csdn.net/race604/article/details/7564088

更多相关文章

  1. 安全新手入坑——HTML标签
  2. 一款常用的 Squid 日志分析工具
  3. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  4. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  5. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  6. Android中Textview显示Html,图文混排,支持图片点击放大
  7. 为android java基础库插入log
  8. android中引用项目工程中的sqlite文件
  9. Android(安卓)armeabi的so库兼容问题

随机推荐

  1. Android(安卓)7.1.2(Android(安卓)N) And
  2. android程序在Layout中设置控件水平或垂
  3. Android(安卓)控件常用属性
  4. android 程序分享。。
  5. android 布局文件详解
  6. Android(安卓)7.1 去掉桌面上的谷歌搜索
  7. Android安装
  8. [Android(安卓)UI] listview 自定义style
  9. android 塔防游戏汇总 及android 游戏开
  10. JAVA & Android(安卓)系统环境变量配置