我正在尝试创建一个自定义视图来替换我在多个地方使用的某个布局,但我正在努力这样做。
基本上,我想替换这个:
<RelativeLayout
android:id="@+id/dolphinLine"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@drawable/background_box_light_blue"
android:padding="10dip"
android:layout_margin="10dip">
<TextView
android:id="@+id/dolphinTitle"
android:layout_width="200dip"
android:layout_height="100dip"
android:layout_alignParentLeft="true"
android:layout_marginLeft="10dip"
android:text="@string/my_title"
android:textSize="30dip"
android:textStyle="bold"
android:textColor="#2E4C71"
android:gravity="center"/>
<Button
android:id="@+id/dolphinMinusButton"
android:layout_width="100dip"
android:layout_height="100dip"
android:layout_toRightOf="@+id/dolphinTitle"
android:layout_marginLeft="30dip"
android:text="@string/minus_button"
android:textSize="70dip"
android:textStyle="bold"
android:gravity="center"
android:layout_marginTop="1dip"
android:background="@drawable/button_blue_square_selector"
android:textColor="#FFFFFF"
android:onClick="onClick"/>
<TextView
android:id="@+id/dolphinValue"
android:layout_width="100dip"
android:layout_height="100dip"
android:layout_marginLeft="15dip"
android:background="@android:drawable/editbox_background"
android:layout_toRightOf="@+id/dolphinMinusButton"
android:text="0"
android:textColor="#2E4C71"
android:textSize="50dip"
android:gravity="center"
android:textStyle="bold"
android:inputType="none"/>
<Button
android:id="@+id/dolphinPlusButton"
android:layout_width="100dip"
android:layout_height="100dip"
android:layout_toRightOf="@+id/dolphinValue"
android:layout_marginLeft="15dip"
android:text="@string/plus_button"
android:textSize="70dip"
android:textStyle="bold"
android:gravity="center"
android:layout_marginTop="1dip"
android:background="@drawable/button_blue_square_selector"
android:textColor="#FFFFFF"
android:onClick="onClick"/>
</RelativeLayout>
这样:
<view class="com.example.MyQuantityBox"
android:id="@+id/dolphinBox"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:myCustomAttribute="@string/my_title"/>
所以,我不想要一个自定义布局,我想要一个自定义视图(这个视图应该不可能有子视图)。
唯一可以从 MyQuantityBox 的一个实例更改为另一个实例的是标题。我非常希望能够在 XML 中指定它(就像我在最后一行 XML 中所做的那样)
我怎样才能做到这一点?我应该将 RelativeLayout 放在 /res/layout 中的 XML 文件中,然后在 MyBoxQuantity 类中对其进行扩充吗?如果是,我该怎么做?
谢谢!
原文由 nbarraille 发布,翻译遵循 CC BY-SA 4.0 许可协议
是的,你可以这样做。 RelativeLayout、LinearLayout 等是视图,因此自定义布局是自定义视图。只是需要考虑的事情,因为如果您想创建自定义布局,您可以。
您要做的是创建一个复合控件。您将创建一个 RelativeLayout 的子类,在代码中添加我们所有的组件(TextView 等),并且在您的构造函数中,您可以读取从 XML 传入的属性。然后,您可以将该属性传递给您的标题 TextView。
http://developer.android.com/guide/topics/ui/custom-components.html