Android里merge和include标签的使用

1.使用<include /> 标签来重用layout代码

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

 

 

[xhtml:showcolumns]  view plain copy
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. <com.android.launcher.Workspace   
  2.  android:id="@+id/workspace"    
  3.  android:layout_width="fill_parent"    
  4.  android:layout_height="fill_parent"    
  5.  launcher:defaultScreen="1">    
  6.   <include android:id="@+id/cell1" layout="@layout/workspace_screen" />   
  7.   <include android:id="@+id/cell2" layout="@layout/workspace_screen" />    
  8.   <include android:id="@+id/cell3"layout="@layout/workspace_screen" />  
  9. </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 plain copy
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_width="fill_parent"  
  3.     android:layout_height="fill_parent">  
  4.   
  5.     <ImageView  
  6.         android:layout_width="fill_parent"  
  7.         android:layout_height="fill_parent"   
  8.   
  9.         android:scaleType="center"  
  10.         android:src="@drawable/golden_gate" />  
  11.   
  12.     <TextView  
  13.         android:layout_width="wrap_content"  
  14.         android:layout_height="wrap_content"  
  15.         android:layout_marginBottom="20dip"  
  16.         android:layout_gravity="center_horizontal|bottom"  
  17.   
  18.         android:padding="12dip"  
  19.   
  20.         android:background="#AA000000"  
  21.         android:textColor="#ffffffff"  
  22.   
  23.         android:text="Golden Gate" />  
  24.   
  25. </FrameLayout>  

 

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

layouttutorial_merge_01

 

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

layouttutorial_merge_02

 

 

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

[xhtml:showcolumns]  view plain copy
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. <merge xmlns:android="http://schemas.android.com/apk/res/android">  
  2.   
  3.     <ImageView  
  4.         android:layout_width="fill_parent"  
  5.         android:layout_height="fill_parent"   
  6.   
  7.         android:scaleType="center"  
  8.         android:src="@drawable/golden_gate" />  
  9.   
  10.     <TextView  
  11.         android:layout_width="wrap_content"  
  12.         android:layout_height="wrap_content"  
  13.         android:layout_marginBottom="20dip"  
  14.         android:layout_gravity="center_horizontal|bottom"  
  15.   
  16.         android:padding="12dip"  
  17.   
  18.         android:background="#AA000000"  
  19.         android:textColor="#ffffffff"  
  20.   
  21.         android:text="Golden Gate" />  
  22.   
  23. </merge>  
  

 

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

layouttutorial_merge_03

 

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

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

另外有两点需要特别注意:

  • <merge />只可以作为xml layout的根节点。
  • 当需要扩充的xml layout本身是由merge作为根节点的话,需要将被导入的xml layout置于 viewGroup中,同时需要设置attachToRoot为True。(更多说明请参见inflate()文档)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值