我已经用它的所有构造函数扩展了一个RelativeLayout。我在xml中创建了一个我在我的类构造函数中膨胀的布局。
我的MyClass代码
public class MyClass extends RelativeLayout
{
LayoutInflater inflater = null;
EditText edit_text;
Button btn_clear;
public MyClass(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public MyClass(Context context, AttributeSet attrs)
{
super(context, attrs);
// TODO Auto-generated constructor stub
inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.my_class_layout, this, true);
edit_text = (EditText) findViewById(R.id.clearable_edit);
btn_clear = (Button) findViewById(R.id.clearable_button_clear);
btn_clear.setVisibility(RelativeLayout.INVISIBLE);
}
public MyClass(Context context)
{
super(context);
// TODO Auto-generated constructor stub
}
}
我膨胀的班级布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/clearable_edit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/clearable_button_clear"
android:layout_width="30dip"
android:layout_height="30dip"
android:layout_alignParentRight="true"
android:background="@drawable/image_clear"
android:layout_centerVertical="true"
android:layout_marginRight="5dip"/>
</RelativeLayout>
我在我的活动布局中使用MyClass,就像这样
<com.and.MyClass
android:id="@+id/my_class"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
这很好用。 但是当我在构造函数MyClass(Context context)中膨胀我的类布局时,它就不起作用了。
我没有得到什么问题。我希望你能得到我的问题。
答案 0 :(得分:2)
请更改您的代码
public class MyClass extends RelativeLayout
{ LayoutInflater inflater = null; EditText edit_text; 按钮btn_clear;
public MyClass(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
init();
}
public MyClass(Context context, AttributeSet attrs)
{
super(context, attrs);
// TODO Auto-generated constructor stub
init();
}
public MyClass(Context context)
{
super(context);
// TODO Auto-generated constructor stub
init();
}
public void init() {
inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.my_class_layout, this, true);
edit_text = (EditText) findViewById(R.id.clearable_edit);
btn_clear = (Button) findViewById(R.id.clearable_button_clear);
btn_clear.setVisibility(RelativeLayout.INVISIBLE);
}
}
答案 1 :(得分:2)
这没关系。
我们在xml中使用View
public MyClass(Context context, AttributeSet attrs)
将调用此构造函数。
因为XML中的所有属性都使用AttributeSet
传递给此构造函数,所以这些值将对View
的布局和其他字段产生影响。
但是,如果你想在Java中使用你的View
,你也应该在所有View
的构造函数中膨胀(推荐的方法)。