2010-10-13 23 views
3

我已經創建了一個基於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?

我已經試過2種方式把一個節點的佈局(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

第一個變體必須工作。你有沒有在代碼中輸入錯字? ''而不是''? – 2010-10-13 12:30:55

+0

Ups,固定。謝謝。 – 2010-10-13 12:37:11

+0

現在程序有效嗎? – 2010-10-13 12:41:22

回答

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屬性。

+1

嘿,我知道這是一箇舊的帖子,但首先感謝你的帖子它幫了我很多。其次,合併不是必需的,xmlns字段可以放在你的test.todolist.ClearableEditText裏面。 – 2011-10-13 13:50:03