如何使用复合控件

时间:2010-10-13 12:19:40

标签: android

我已经基于LinearLayout创建了一个自定义ViewGroup。

ClearableEditText.java

package test.todolist;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

public class ClearableEditText extends LinearLayout{
    private EditText editText;
    private Button button;

    public ClearableEditText (Context context){
        super (context);

        String service = Context.LAYOUT_INFLATER_SERVICE;
        LayoutInflater li = (LayoutInflater)getContext ().getSystemService (service);
        li.inflate (R.layout.clearable_edit_text, this, true);

        editText = (EditText)findViewById (R.id.clearEditText);
        button = (Button)findViewById (R.id.clearButton);

        configButton ();
    }

    private void configButton (){
        button.setOnClickListener (new Button.OnClickListener (){
            public void onClick (View v){
                editText.setText ("");
            }
        });
    }
}

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="match_parent"
    android:layout_height="wrap_content">
    <EditText
        android:id="@+id/clearEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
    />
    <Button
        android:id="@+id/clearButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/clear"
    />
</LinearLayout>

我现在如何使用ClearableEditText?

我试图以两种方式在布局(main.xml)中放置一个节点:

<test.todolist.ClearableEditText/>

<test.todolist.clearable_edit_text/>

但他们都没有工作。

我的 main.xml

<?xml version="1.0" encoding="utf-8"?>
<test.todolist.ClearableEditText/>

我的 ToDoList.java (主要活动):

package test.todolist;

import android.app.Activity;
import android.os.Bundle;

public class ToDoList extends Activity{
    @Override
    public void onCreate (Bundle savedInstanceState){
        super.onCreate (savedInstanceState);
        setContentView (R.layout.main);
    }
}

感谢。

1 个答案:

答案 0 :(得分:4)

解决。 main.xml应该是:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <test.todolist.ClearableEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</merge>

首先是merge代码,因为在使用自定义视图时需要它。我的自定义视图有一个LinearLayout根,因此如果我在main.xml中设置另一个LinearLayout或FrameLayout根来使用我的自定义视图效率很低。 merge解决了这个问题。

其次,所有观看次数必须包含layout_widthlayout_height属性。