【IT专家】[Android个人理解(六)]使用include标签的注意事项
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文由我司收集整编,推荐下载,如有疑问,请与我司联系[Android个人理解(六)]使用include标签的注意事项2015/04/25 0 我们在使用include标签时是为了提高部分代码的重用性,同时增加代码的层次性和条理性。
但是在我们实际使用的时候,往往就会由于include 的属性和include的原理不够清楚,而产生bug。
1、首先,我们说明include标签所在布局文件a和include所包含的布局文件b的关系必须明确a和b通过使用include连接,与其说是包含,更像是拼接。
Include不是View类,自然与其内的布局对象,不是嵌套关系。
我们都清楚,我们可以将a中的include标签删去,直接复制粘贴b的代码,这样是可以的。
但是我们在使用的时候往往会出现,无法直接根据id找到b下的组件或者在一些组件中比如DrawerLayout无法识别b的组件等
问题,但这些我们都可以当做对include理解的烟雾。
上述原因是系统通过include
标签识别xml文件的机制由于绕了一个圈,自然会出现当某些部分被重写后,直接调用的方法就失效的情况。
(PS:个人理解,看不到include的源码,不知道include 的具体实现)2、然后由上,我们由拼接关系,我们就可以理解merge标签的必要性。
是告诉系统b布局文件是include下的一个合法的布局文件,可以直接拼接,以使b文件内的组件和a中include标签所在的附近组件是平级关系。
平级关系的目的是优化UI结构,减少结点冗余。
因为xml嵌套越多,系统需要遍历的次数也就
越多。
3、问题又来了,既然是拼接关系,那么include的属性的作用是什么?include的属性的意义是重写他包含的的根组件的属性,不仅仅是id,更多的是重写layout属性。
Android开发的官方网站的说明这样提到:“Similarly, you can override all the layout parameters. This means that any android:layout_* attribute can be used with the tag.” 意思是任何android:layout_*属性都可以应用在标签中。
含义有两层,一是必须同时重载layoutwidth和layoutheight熟悉,其他的layout_*属性才会起作用,否这都会被忽略掉。
另一层是只能在include属性写layout_*属性。
因为还是上面的原因,include没有实际意义,重写的属性的目的就是确定b布局文件的拼接位置。
同时我们也很容易明白,因为重写了根布局的属性,b文件下的根布局的layout就不起作用了。
4、还是由上个问题,我们引出include标签的id属性。
不仅仅如果。