2011-05-05 80 views
14

我有,並就如何創建自定義此控制思想: Android interface - need suggestions on what widgets to use自定義控件中的充氣佈局 - 如何?

如何讓我的一樣,但在創建XML控件的佈局,只是誇大它的代碼?不像在這個例子中我必須手動創建每個控件。

我的第一個問題是,用作基礎的LinearLayout不支持setView()命令。我應該擴展別的東西嗎?

編輯:我發現 此: http://developer.android.com/guide/topics/ui/custom-components.html 這: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List4.html

好像我需要複合控制。我只需要一點代碼。如何從XML擴充控件的內容? BOth文章和示例說我可以但如何?

回答

22

你必須使用這樣的佈局:

<?xml version="1.0" encoding="utf-8"?> 
<merge xmlns:android="http://schemas.android.com/apk/res/android"> 
    <View android:layout_width="fill_parent" 
    android:layout_height="0px" 
    android:layout_weight="1" 
    android:background="#0F0"/> 
    <View android:layout_width="fill_parent" 
    android:layout_height="0px" 
    android:layout_weight="1" 
    android:background="#0FF"/> 
</merge> 

其中<merge>的意思是「把一切這裏面我到父我要被膨脹到」。

然後在代碼:

public class CControl extends LinearLayout { 

    public CControl(Context context) { 
     this(context, null); 
    } 

    public CControl(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     inflater.inflate(R.layout.tryout, this); 
    } 
    // ...... 
} 

此時,您可以使用您的複合控制,就好像它是一個LinearLayout中,所以你必須在外部佈局來指定,如果你希望它是垂直的,對於例如,或者您可以在構造函數中將其設置爲默認值。

+0

這是事件更好。如果我不希望LinearLayout成爲基礎?我應該擴展視圖嗎?我正在爲我的複合控制尋找最輕的容器。無論如何,我會將它插入到LinearLayout的Activity中,所以我不需要另一個嵌套層次。 – katit 2011-05-05 18:45:27

+0

@katit:如果我正在創建一個全新的視圖,在onDraw()中繪製所有東西,我會擴展視圖。你需要一個複合控件的佈局,因爲它肯定是一個可重複使用的統一體,而且選擇主要取決於你想如何佈置子視圖。我不會太在意優化,除非你展示了數百個這樣的(反正它會很糟糕)。 – bigstones 2011-05-05 19:28:35

+0

明白了。我不會顯示飢餓。通常2-3可能4.我喜歡從開始學習最好的方式。但在這裏,似乎使用佈局將是確定的。 – katit 2011-05-05 20:58:35