0

我已经为按钮制作了自己的布局。Normaly 我通过这个创建一个视图:

LayoutInflater inflater = LayoutInflater.from(getActivity());
myButton = inflater.inflate(R.layout.mybutton, null, false);

现在我的想法是类 myButton 扩展了 View,我不必为每个 Button 编写这些行。但是我怎样才能在 myButton 构造函数中引入这两行呢?我不能写:

public MyButton(Context c)
{
    this = inflater.inflate(R.layout.mybutton, null, false);
}

如何构建一个始终具有相同布局的自定义视图,以便我可以构建一个具有预加载布局的新 myButton,如下所示:

MyButton myButton = new MyButton();

这是我想用于 myButton 的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/cell_shape"
android:orientation="vertical"
android:paddingBottom="@dimen/PaddingBottom"
android:paddingLeft="@dimen/PaddingHorizontal"
android:paddingRight="@dimen/PaddingHorizontal"
android:paddingTop="@dimen/PaddingTop" >

<TextView
    android:id="@+id/Fach"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="@dimen/MarginTop"
    android:text=""
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textStyle="bold" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/Klasse"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="@dimen/MarginTop"
        android:text="" />

    <TextView
        android:id="@+id/Raum"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:text="" />
</LinearLayout>

4

2 回答 2

1

您仍然可以使用几乎独立于任何布局的 xml 重用按钮。只需创建一个button.xml可绘制的文件夹,该文件夹将定义您的所有按钮属性。这是一个具有自定义角半径和颜色渐变的按钮布局示例(res/values/colors.xml当然,您需要在 中定义这些颜色):

<item android:state_pressed="true">
    <shape>
        <gradient
            android:startColor="@color/pressed1"
            android:endColor="@color/pressed2"
            android:angle="90" />
        <corners android:radius="4dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>
</item>

<item android:state_focused="true">
    <shape>
        <gradient
            android:endColor="@color/focused1"
            android:startColor="@color/focused2"
            android:angle="270" />
        <corners android:radius="4dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>
</item>

<item>
    <shape>
        <gradient
            android:startColor="@color/default1"
            android:endColor="@color/default2"
            android:angle="90" />
        <corners android:radius="4dp" />
        <padding
            android:left="20dp"
            android:top="10dp"
            android:right="20dp"
            android:bottom="10dp" />
    </shape>
</item>

每当您需要重用它时,您可以像往常一样创建一个按钮视图:

        <Button
            android:id="@id/button1"
            android:layout_width="wrap_content"
            android:background="@drawable/button"
            android:text="@string/button_text">
        </Button>
于 2013-05-04T18:01:35.040 回答
0

我找到了一个解决方案:

public MyButton extends LinearLayout 
{
    public MyButton(Context context) 
    {
        super(context);
        LayoutInflater.from(context).inflate(R.layout.myButton, this, true);
        //other initialization...
    }
}

使用此 XML 布局:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Own Layout -->
</merge>
于 2013-05-05T10:34:34.787 回答