您的位置:首页 > 移动开发 > Android开发

Android里merge和include标签的使用

2015-02-27 17:36 411 查看
1.使用<include /> 标签来重用layout代码


如果在一个项目中需要用到相同的布局设计,可以通过<include /> 标签来重用layout代码,该标签在android开发文档中没有相关的介绍。在android主屏程序中 用到了这个标签:

 

 

[xhtml:showcolumns] view
plaincopy

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

<com.android.launcher.Workspace   

 android:id="@+id/workspace"    

 android:layout_width="fill_parent"    

 android:layout_height="fill_parent"    

 launcher:defaultScreen="1">    

  <include android:id="@+id/cell1" layout="@layout/workspace_screen" />   

  <include android:id="@+id/cell2" layout="@layout/workspace_screen" />    

  <include android:id="@+id/cell3"layout="@layout/workspace_screen" />  

</com.android.launcher.Workspace>  

 

这样可以多次引用一个布局片段而不用重复的复制、粘贴。通过include标签也可以覆写一些属性的值,例如上面的示例就覆写了引用的layout中的id值。下面是另外一个示例:
<div style="OVERFLOW-X: auto; OVERFLOW-Y: auto; BACKGROUND-COLOR: rgb(231,229,220); MARGIN: 18px 0px; WIDTH: 687px; FONT-FAMILY: Consolas, 'Courier New', Courier, mono, serif; FONT-SIZE: 12px; PADDING-TOP: 1px" class="dp-highlighter bg_c-sharp"><div style="PADDING-LEFT: 45px" class="bar"><div style="BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 10px; LINE-HEIGHT: normal; BACKGROUND-COLOR: rgb(248,248,248); PADDING-LEFT: 10px; PADDING-RIGHT: 8px; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; COLOR: silver; FONT-SIZE: 9px; PADDING-TOP: 3px" class="tools"><strong>[c-sharp]</strong> <a target=_blank style="BACKGROUND-IMAGE: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 1px; BORDER-RIGHT-STYLE: none; TEXT-INDENT: -2000px; MARGIN: 0px 10px 0px 0px; PADDING-LEFT: 1px; WIDTH: 16px; PADDING-RIGHT: 1px; DISPLAY: inline-block; BACKGROUND-POSITION: 0% 0%; BORDER-TOP-STYLE: none; HEIGHT: 16px; COLOR: rgb(160,160,160); FONT-SIZE: 9px; BORDER-LEFT-STYLE: none; TEXT-DECORATION: none; PADDING-TOP: 1px; background-origin: initial; background-clip: initial; border-image: initial" class="ViewSource" title="view plain" href="http://blog.csdn.net/chenlaic/article/details/6090069#">view plain</a><a target=_blank style="BACKGROUND-IMAGE: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 1px; BORDER-RIGHT-STYLE: none; TEXT-INDENT: -2000px; MARGIN: 0px 10px 0px 0px; PADDING-LEFT: 1px; WIDTH: 16px; PADDING-RIGHT: 1px; DISPLAY: inline-block; BACKGROUND-POSITION: 0% 0%; BORDER-TOP-STYLE: none; HEIGHT: 16px; COLOR: rgb(160,160,160); FONT-SIZE: 9px; BORDER-LEFT-STYLE: none; TEXT-DECORATION: none; PADDING-TOP: 1px; background-origin: initial; background-clip: initial; border-image: initial" class="CopyToClipboard" title="copy" href="http://blog.csdn.net/chenlaic/article/details/6090069#">copy</a><div style="Z-INDEX: 99; POSITION: absolute; WIDTH: 18px; HEIGHT: 18px; TOP: 895px; LEFT: 584px"><embed id="ZeroClipboardMovie_2" height="18" name="ZeroClipboardMovie_2" type="application/x-shockwave-flash" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" width="18" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="false" flashvars="id=2&width=18&height=18" wmode="transparent" /></div><div style="Z-INDEX: 99; POSITION: absolute; WIDTH: 18px; HEIGHT: 18px; TOP: 949px; LEFT: 518px"><embed id="ZeroClipboardMovie_2" height="18" name="ZeroClipboardMovie_2" type="application/x-shockwave-flash" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" width="18" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="false" flashvars="id=2&width=18&height=18" wmode="transparent" /></div></div></div><ol style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: rgb(255,255,255); MARGIN: 0px 0px 1px 45px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; COLOR: rgb(92,92,92); BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial" class="dp-c"><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial" class="alt"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial"><span style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial"><include android:layout_width=</span><span class="string" style="color:blue;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">"fill_parent"</span><span style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">layout=</span><span class="string" style="color:blue;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">"@layout/image_holder"</span><span style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial"> />  </span></span></li><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: rgb(248,248,248); LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial"><include android:layout_width=<span class="string" style="color:blue;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">"256dip"</span><span style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial"> layout=</span><span class="string" style="color:blue;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">"@layout/image_holder"</span><span style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial"> />  </span></span></li></ol></div>
<strong>2.使用<merge /> 标签来减少视图层级结构
</strong>
在Android layout文件中需要一个顶级容器来容纳其他的组件,而不能直接放置多个组件,例如如下的代码:
<div style="OVERFLOW-X: auto; OVERFLOW-Y: auto; BACKGROUND-COLOR: rgb(231,229,220); MARGIN: 18px 0px; WIDTH: 687px; FONT-FAMILY: Consolas, 'Courier New', Courier, mono, serif; FONT-SIZE: 12px; PADDING-TOP: 1px" class="dp-highlighter bg_c-sharp"><div style="PADDING-LEFT: 45px" class="bar"><div style="BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 10px; LINE-HEIGHT: normal; BACKGROUND-COLOR: rgb(248,248,248); PADDING-LEFT: 10px; PADDING-RIGHT: 8px; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; COLOR: silver; FONT-SIZE: 9px; PADDING-TOP: 3px" class="tools"><strong>[c-sharp]</strong> <a target=_blank style="BACKGROUND-IMAGE: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 1px; BORDER-RIGHT-STYLE: none; TEXT-INDENT: -2000px; MARGIN: 0px 10px 0px 0px; PADDING-LEFT: 1px; WIDTH: 16px; PADDING-RIGHT: 1px; DISPLAY: inline-block; BACKGROUND-POSITION: 0% 0%; BORDER-TOP-STYLE: none; HEIGHT: 16px; COLOR: rgb(160,160,160); FONT-SIZE: 9px; BORDER-LEFT-STYLE: none; TEXT-DECORATION: none; PADDING-TOP: 1px; background-origin: initial; background-clip: initial; border-image: initial" class="ViewSource" title="view plain" href="http://blog.csdn.net/chenlaic/article/details/6090069#">view plain</a><a target=_blank style="BACKGROUND-IMAGE: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 1px; BORDER-RIGHT-STYLE: none; TEXT-INDENT: -2000px; MARGIN: 0px 10px 0px 0px; PADDING-LEFT: 1px; WIDTH: 16px; PADDING-RIGHT: 1px; DISPLAY: inline-block; BACKGROUND-POSITION: 0% 0%; BORDER-TOP-STYLE: none; HEIGHT: 16px; COLOR: rgb(160,160,160); FONT-SIZE: 9px; BORDER-LEFT-STYLE: none; TEXT-DECORATION: none; PADDING-TOP: 1px; background-origin: initial; background-clip: initial; border-image: initial" class="CopyToClipboard" title="copy" href="http://blog.csdn.net/chenlaic/article/details/6090069#">copy</a><div style="Z-INDEX: 99; POSITION: absolute; WIDTH: 18px; HEIGHT: 18px; TOP: 1144px; LEFT: 584px"><embed id="ZeroClipboardMovie_3" height="18" name="ZeroClipboardMovie_3" type="application/x-shockwave-flash" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" width="18" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="false" flashvars="id=3&width=18&height=18" wmode="transparent" /></div><div style="Z-INDEX: 99; POSITION: absolute; WIDTH: 18px; HEIGHT: 18px; TOP: 1172px; LEFT: 518px"><embed id="ZeroClipboardMovie_3" height="18" name="ZeroClipboardMovie_3" type="application/x-shockwave-flash" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" width="18" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="false" flashvars="id=3&width=18&height=18" wmode="transparent" /></div></div></div><ol style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: rgb(255,255,255); MARGIN: 0px 0px 1px 45px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; COLOR: rgb(92,92,92); BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial" class="dp-c"><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial" class="alt"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial"><span style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial"><FrameLayout xmlns:android=</span><span class="string" style="color:blue;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">"http://schemas.android.com/apk/res/android"</span><span style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">  </span></span></li><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: rgb(248,248,248); LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">    android:layout_width=<span class="string" style="color:blue;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">"fill_parent"</span><span style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">  </span></span></li><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial" class="alt"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">    android:layout_height=<span class="string" style="color:blue;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">"fill_parent"</span><span style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">>  </span></span></li><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: rgb(248,248,248); LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">  </span></li><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial" class="alt"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">    <ImageView  </span></li><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: rgb(248,248,248); LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">        android:layout_width=<span class="string" style="color:blue;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">"fill_parent"</span><span style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">  </span></span></li><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial" class="alt"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">        android:layout_height=<span class="string" style="color:blue;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">"fill_parent"</span><span style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">   </span></span></li><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: rgb(248,248,248); LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">        android:scaleType=<span class="string" style="color:blue;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">"center"</span><span style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">  </span></span></li><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial" class="alt"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">        android:src=<span class="string" style="color:blue;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">"@drawable/golden_gate"</span><span style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial"> />  </span></span></li><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: rgb(248,248,248); LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">  </span></li><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial" class="alt"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">    <TextView  </span></li><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: rgb(248,248,248); LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">        android:layout_width=<span class="string" style="color:blue;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">"wrap_content"</span><span style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">  </span></span></li><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial" class="alt"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">        android:layout_height=<span class="string" style="color:blue;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">"wrap_content"</span><span style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">  </span></span></li><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: rgb(248,248,248); LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">        android:text=<span class="string" style="color:blue;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">"Golden Gate"</span><span style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial"> />  </span></span></li><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial" class="alt"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial">  </span></li><li style="LIST-STYLE-POSITION: outside !important; BORDER-BOTTOM-STYLE: none; BORDER-LEFT: rgb(108,226,108) 3px solid; PADDING-BOTTOM: 0px !important; LINE-HEIGHT: 18px; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: rgb(248,248,248); LIST-STYLE-TYPE: decimal-leading-zero; MARGIN: 0px; PADDING-LEFT: 10px !important; PADDING-RIGHT: 3px !important; BORDER-TOP-STYLE: none; PADDING-TOP: 0px !important; border-image: initial"><span style="color:black;BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; BORDER-RIGHT-STYLE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; PADDING-TOP: 0px; border-image: initial"></FrameLayout>  </span></li></ol></div>
单独将<merge />标签做个介绍,是因为它在优化UI结构时起到很重要的作用。目的是通过删减多余或者额外的层级,从而优化整个Android Layout的结构。


3.将通过一个例子来了解这个标签实际所产生的作用,这样可以更直观的了解<merge/>的用法。

建立一个简单的Layout,其中包含两个Views元素:ImageViewTextView 默认状态下我们将这两个元素放在FrameLayout中。其效果是在主视图中全屏显示一张图片,之后将标题显示在图片上,并位于视图的下方。以下是xml代码:

 

[xhtml:showcolumns] view
plaincopy

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  

    android:layout_width="fill_parent"  

    android:layout_height="fill_parent">  

  

    <ImageView  

        android:layout_width="fill_parent"  

        android:layout_height="fill_parent"   

  

        android:scaleType="center"  

        android:src="@drawable/golden_gate" />  

  

    <TextView  

        android:layout_width="wrap_content"  

        android:layout_height="wrap_content"  

        android:layout_marginBottom="20dip"  

        android:layout_gravity="center_horizontal|bottom"  

  

        android:padding="12dip"  

  

        android:background="#AA000000"  

        android:textColor="#ffffffff"  

  

        android:text="Golden Gate" />  

  

</FrameLayout>  

 

应用上边的Layout运行的视图为:





 

启动 tools> hierarchyviewer.bat工具查看当前UI结构视图:





 

 

我们可以很明显的看到由红色线框所包含的结构出现了两个framelayout节点,很明显这两个完全意义相同的节点造成了资源浪费(这里可以提醒大家在开发工程中可以习惯性的通过hierarchyViewer查看当前UI资源的分配情况),那么如何才能解决这种问题呢(就当前例子是如何去掉多余的frameLayout节点)?这时候就要用到<merge />标签来处理类似的问题了。我们将上边xml代码中的framLayout替换成merge:

[xhtml:showcolumns] view
plaincopy

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

<merge xmlns:android="http://schemas.android.com/apk/res/android">  

  

    <ImageView  

        android:layout_width="fill_parent"  

        android:layout_height="fill_parent"   

  

        android:scaleType="center"  

        android:src="@drawable/golden_gate" />  

  

    <TextView  

        android:layout_width="wrap_content"  

        android:layout_height="wrap_content"  

        android:layout_marginBottom="20dip"  

        android:layout_gravity="center_horizontal|bottom"  

  

        android:padding="12dip"  

  

        android:background="#AA000000"  

        android:textColor="#ffffffff"  

  

        android:text="Golden Gate" />  

  

</merge>  

  

 

运行程序后在Emulator中显示的效果是一样的,可是通过hierarchyviewer查看的UI结构是有变化的,当初多余的 FrameLayout节点被合并在一起了,或者可以理解为将merge标签中的子集直接加到Activity的FrameLayout跟节点下(这里需要提醒大家注意:所有的Activity视图的根节点都是frameLayout)。如果你所创建的Layout并不是用framLayout作为根节点(而是应用LinerLayout等定义root标签),就不能应用上边的例子通过merge来优化UI结构。





 

4.除了上边的例子外,meger还有另外一个用法

当应用Include或者ViewStub标签从外部导入xml结构时,可以将被导入的xml用merge作为根节点表示,这样当被嵌入父级结构中后可以很好的将它所包含的子集融合到父级结构中,而不会出现冗余的节点。

另外有两点需要特别注意:
<merge />只可以作为xml layout的根节点。
当需要扩充的xml layout本身是由merge作为根节点的话,需要将被导入的xml layout置于 viewGroup中,同时需要设置attachToRoot为True。(更多说明请参见inflate()文档)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  优化 布局 merge include