如何创建可重用的UI组件

时间:2011-12-17 06:15:27

标签: android

这似乎是一个简单的问题,我应该能够轻松找到,但我很难理解如何为Android创建可重用的UI组件。具体来说,我正在尝试创建这个片段,我将其用于可重复使用的组件,以使代码更小。

<RelativeLayout
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:paddingBottom="0dp"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="10dp">          
    <TextView
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:textColor="@color/text_normal"
        android:id="@+id/my_text_id"
        android:text="My field"/>

    <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:textColor="@color/text_normal"
        android:text="My value"
        android:id="@+id/my_value_id"/>

</RelativeLayout>

这些就像这样使用

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@color/background_normal"
    android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    <LinearLayout
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">
          <RelativeLayout
             android:layout_width="fill_parent" 
             android:layout_height="fill_parent"
             android:paddingBottom="0dp"
             android:paddingLeft="10dp"
             android:paddingRight="10dp"
             android:paddingTop="10dp">         
             <TextView
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:textColor="@color/text_normal"
                android:id="@+id/my_text_id"
                android:text="My field"/>

             <TextView 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:textColor="@color/text_normal"
                android:text="My value"
                android:id="@+id/my_value_id"/>

          </RelativeLayout>
    </LinearLayout>
    <LinearLayout
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">
          <RelativeLayout
             android:layout_width="fill_parent" 
             android:layout_height="fill_parent"
             android:paddingBottom="0dp"
             android:paddingLeft="10dp"
             android:paddingRight="10dp"
             android:paddingTop="10dp">         
             <TextView
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:textColor="@color/text_normal"
                android:id="@+id/my_text_id2"
                android:text="My field2"/>

             <TextView 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:textColor="@color/text_normal"
                android:text="My value2"
                android:id="@+id/my_value_id2"/>

          </RelativeLayout>
          .... etc ....
    </LinearLayout>
</ScrollView>

我希望能够访问这两个文本框,以便在其中添加带有<include />标记的值到布局中。有谁知道怎么做?

我见过http://developer.android.com/resources/articles/layout-tricks-reuse.html,但我似乎没有看到如何分配同一个字段的多个。

感谢任何帮助。

更新这些用于将TextView放在屏幕左侧,将另一个放在右侧,排列在一起。不确定如何描述它,但这些在ScrollView中使用。

2 个答案:

答案 0 :(得分:3)

使用开发人员 http://developer.android.com/resources/articles/layout-tricks-reuse.html

所述的包含标记

并找到该布局中的组件就像这样

findViewById(R.id.include03).findViewById(R.id.Spinner01) 

inculde03布局中包含组件的名称,spinner01将是包含布局中的组件,也可以是布局中的其他组件。

答案 1 :(得分:2)

使用“include”和“merge”将布局“注入”到现有布局中。一旦包含,您可以像在布局中一样引用视图。

如果您想多次“包含”相同的布局,那么您有两个选择:

a)使用ListView和适配器重复视图 b)在代码中膨胀视图并使用addView()手动添加它们。在扩展每个视图时,可以使用findViewById专门在该视图中定位窗口小部件。