0

我已经用它的所有构造函数扩展了一个 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) 中膨胀我的类布局时,它就不起作用了。

我没有得到什么问题。我希望你能得到我的问题。

4

2 回答 2

2

请像这样更改您的代码

public class MyClass extends RelativeLayout

{ LayoutInflater inflater = null; 编辑文本编辑文本;按钮 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);
   }

}

于 2012-01-19T05:30:25.577 回答
2

还行吧。当我们View在 xml 中使用 a

public MyClass(Context context, AttributeSet attrs)

这个构造函数将被调用。

因为 XML 中的所有属性都使用 传递给此构造函数AttributeSet,所以这些值将对View' 的布局和其他字段产生影响。

但是,如果您还想View在 Java 中使用您的,您还应该在 allView的构造函数中膨胀(这是推荐的方法)。

于 2012-01-19T05:31:03.493 回答