在一个视图类中组合多个UI元素

时间:2012-02-23 17:03:16

标签: android textview

我想将自己的视图类定义为一个DisplayClass,其中包含几个Textview,ImageViews,ProgressViews,并将这些视图作为元素。

这背后的想法是,可以在XML中多次重复使用DisplayClass,并轻松访问/更新不同的DisplayClass实例。

在XML中,它看起来像是一个多次使用的自定义小部件,就像这里......

    <myDisplayClass
                android:id="@+id/id1"
                android:layout_width="60dp"
                android:layout_height="wrap_content"
                android:leftText ="x1..."
                android:midText = "y1.."
                android:topText = "z1.."
                ...and other fields />

  <myDisplayClass
                android:id="@+id/id2"
                android:layout_width="60dp"
                android:layout_height="wrap_content"
                android:leftText ="x2..."
                android:midText = "y2.."
                android:topText = "z2.."
                ...and other fields />

 <myDisplayClass
                android:id="@+id/id3"
                android:layout_width="60dp"
                android:layout_height="wrap_content"
                android:leftText ="x3..."
                android:midText = "y3.."
                android:topText = "z3.."
                ...and other fields />

<myDisplayClass
                android:id="@+id/id_n"
                android:layout_width="60dp"
                android:layout_height="wrap_content"
                android:leftText ="x.n.."
                android:midText = "y.n."
                android:topText = "z.n."
                ...and other fields />

虽然它基于一个布局display_class.xml,它只定义了一次布局。

非常感谢任何想法,提示或可用的示例/教程。

1 个答案:

答案 0 :(得分:1)

重用常见的xml代码:

你可以在单独的布局中定义它,例如commonlayout.xml,它将具有线性/相对布局等作为父级,并具有你想要的所有视图。

在任何想要使用该布局的xml代码中,您只需使用

即可

<include layout="@layout/commonlayout" />

PS:我不认为你需要在你提出的问题中定义myDisplayClass,如果你只想使用默认的EditText / TextViews / Widgets等......或者你可以解释一下提到的答案不是你在寻找..

编辑: 在评论中指定的概率之后:

View layout1 = findViewById(R.id.layout1); 
TextView tv = (TextView)layout1.findViewById(R.id.commonTextView);   

类似于第二种布局中的另一个文本视图

TextView tv2 = (TextView)layout2.findViewById(R.id.commonTextView);