2011-07-12 90 views
9

我一直在学习有关合并和修改嵌套的属性包括:最近,我有一个问题,我似乎无法找出答案了。假设我有一个布局定义了一个我想添加到多个布局的头部组件。但是,我想更改每个包含用法的每个标题的标题或图标。例如说我有以下布局:上包括布局

<RelativeLayout android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       style="@style/menu_header"> 

    <Button android:id="@+id/backButton" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      style="@style/button" 
      android:text="@string/back"/> 

    <TextView style="@style/headerTitle" 
       android:layout_centerInParent="true" 
       android:text="${title}" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content"/> 
</RelativeLayout> 

然后我就可以使用包括在其他布局:

<LinearLayout ...> 
    <include android:id="@+id/searchHeader" layout="@layout/shared_header" title="Search"/> 
    ... 
</LinearLayout> 

我知道我可以修改任何layout_ *根元素的属性,但我定义其他属性来代替布局,比如在这个例子中说“title”,而不必创建我自己的View子类,在valaues /资源中添加declare-styleable定义等等?

有这样的事情会使得创建可重用的意见,以便更简单,但我似乎无法找到任何证据说,如果合并+包括可以做到这一点。

+0

我有种想,如果你想改变这些意见的内容,你应该利用由这些意见的自定义视图。当你想在其他地方复制/粘贴一个视图/视图组时,包含的东西更多。 – Gregory

+0

但是,如果您只能复制和粘贴完全相同的代码,则包含的用途有限。自定义视图需要更多的开销作者,添加自定义样式选项,创建代码的子类视图等。如果我做的是调整嵌套元素的某些属性,好像可以做,没有吃整个大象 – chubbsondubs

+0

我再次阅读了关于include的快速“教程”(http://android-developers.blogspot.com/2009/02/android-layout-tricks-2-reusing-layouts.html),看起来很清楚,它只是意思是简单的复制/粘贴,特别是当你在2种不同的布局(纵向和横向)中包含一个共同的“子布局”时。尽管我确实发现你的想法非常酷:/ – Gregory

回答

5

答案是不。不幸的是,Android并没有那么强大。您必须创建您自己的ViewGroup扩展并编写更多代码。

+0

你能提供一个如何做到这一点的例子吗? – jpotts18

+0

不,因为编写您自己的自定义组件需要比评论中允许的更多的努力和空间。你不能单独使用布局文件来描述。如果你想构建一些可以重用和参数化的东西,你必须通过扩展ViewGroup来编写自己的客户组件。 – chubbsondubs

+0

我会尽力而为。谢谢! – jpotts18