我正在学习在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>
答案 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>