我已为Button创建了自己的布局。 Normaly我创建了一个View:
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>
答案 0 :(得分:1)
您仍然可以重复使用xml按钮,该按钮几乎与任何布局无关。只需在drawable文件夹中创建一个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>
答案 1 :(得分:0)
我找到了解决方案:
public MyButton extends LinearLayout
{
public MyButton(Context context)
{
super(context);
LayoutInflater.from(context).inflate(R.layout.myButton, this, true);
//other initialization...
}
}
使用此XML-Layout:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Own Layout -->
</merge>