2011-10-19 61 views
0

基本上我想從我已有的代碼中封裝一個簡單的組件。使用普通Android組件創建自定義組件

基本上這是一個LinearLayout裏面的按鈕。這些按鈕將對ListView進行更改,並且還會執行其他一些小操作。

目前,我有那些XML佈局,以編程方式設置一切:按鈕,列表和其他小東西之間的相互作用。

很明顯,我認爲我自己,讓我們封裝這個。

我開始試圖延長LinearLayout並添加按鈕。 我已經不知道如何膨脹按鈕添加到我重寫什麼方法來創建這個按鈕之前的觀點沒有得到與措施和通貨膨脹搞亂創建的視圖 等

我已經看了但是我看到的自定義組件或者是全新的組件或組件,只是將小功能添加到自定義組件中。

這樣做有一些指導原則嗎? 好的教程/例子?

任何幫助表示讚賞。謝謝 !

編輯:

好的,這裏是一個更具體的東西。

基本上我想創建一個View保存爲ListView過濾器按鈕。這將在不同的地方使用不同的過濾器,所以我需要靈活的按鈕。

基本上我想要做這樣的事情:

CustomView view = new CustomView(activity); 
view.addButton("Lala", new OnFilterClickListener { 
    onClick(ListView list, View v) { 
     // Do the filtering 
    } 
}); 

mListView.addHeaderView(view); 

我想以適應它的權重顯示按鈕,顯示哪個過濾器是活躍用戶,這樣的東西。

但我還是真的不知道如何使這些動態添加的按鈕出現,我在哪裏生成它們,如何誇大他們和類似的東西。

+0

添加/膨脹一切的構造 –

+0

如果我想'新CustomView後添加的東西() '?構造函數被調用,但該項目尚未繪製。 – Draiken

+0

如果它擴展了'LinearLayout',你仍然可以使用函數'addView'通常是 –

回答

1
public class myLayout extends LinearLayout { 

    //... 

    public void addButton(String text, OnClickListener listener) { 
     Button newButton = new Button(mContext); 
     newButton.setText(text); 
     newButton.setOnClickListener(listener); 
     //Say we want the weights to be equal 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.Fill_PARENT, 1); 
     addView(newButton, params); 
    } 

    //... 

} 

你甚至可以做一些事情的看法派遣點擊喜歡在此之前:

public class myLayout extends LinearLayout { 

    //... 

    public void addButton(String text, final OnClickListener listener) { 
     Button newButton = new Button(mContext); 
     newButton.setText(text); 
     newButton.setOnClickListener(new OnClickListener(){ 
      public void onClick(View v) { 
       //do whatever you want 
       //like change background of button or something 
       //finally 
       listener.onClick(v); 
      } 
     }); 
     //Say we want the weights to be equal 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.Fill_PARENT, 1); 
     addView(newButton, params); 
    } 

    //... 

} 
+0

我最終做了完全像你說的問題之前,我問了這個問題,但不斷收到錯誤。認爲這是這個代碼,但它是另一回事,哈哈......謝謝! – Draiken