在Android中创建复合控件的问题

时间:2011-05-12 16:23:42

标签: android custom-controls

我正在学习在android中创建一个复合控件。 对于初学者,我尝试了一个带有附加按钮的编辑文本来清除它。

问题是即使我可以在图形视图中看到复合控件 main.xml,有一条错误消息:“自定义视图ClearableEditText未使用2或3参数的View构造函数; XML属性不起作用” 仅在xml图形视图中的错误下,这在项目浏览器中不可见 我能够编译并运行但是关闭力量。

XML:COMPOUND CONTROL clearable_edit_text.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
>
    <EditText android:id="@+id/editText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />
    <Button android:id="@+id/clearButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CLEAR"
    />
</LinearLayout>

CLASS

public class ClearableEditText extends LinearLayout 
{
    EditText et;
    Button btn;

    public ClearableEditText(Context context)
    {
        super(context);
        LayoutInflater li=(LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        li.inflate(R.layout.clearable_edit_text,this,true);

        et=(EditText)findViewById(R.id.editText);
        btn=(Button)findViewById(R.id.clearButton);

        hookupButton();
    }

    private void hookupButton()
    {
        btn.setOnClickListener(new Button.OnClickListener()
        {
            public void onClick(View v)
            {
                et.setText("");
            }
        });
    }
}

main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>
    <com.commsware.android.merge.ClearableEditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />
    <com.commsware.android.merge.ClearableEditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />
</LinearLayout>

1 个答案:

答案 0 :(得分:1)

您的课程延伸LinearLayout,但您从不添加任何观点。您需要致电addView(...)并将充气视图作为参数传递。

此外,要在XML中定义视图,您需要覆盖LinearLayout的2和3参数构造函数。将其添加到您的代码中:

public ClearableEditText(Context context, AttributeSet attrs) {

    super( context, attrs );
}

public ClearableEditText(Context context, AttributeSet attrs, int defStyle) {

    super( context, attrs, defStyle );
}

要让所有3个构造函数使用相同的初始化代码,将代码从单个参数构造函数移动到3参数构造函数,然后在其他2个构造函数中分别调用this(context, null, 0)this(context, attrs, 0)。 / p>