2011-11-17 43 views
1

朋友,如何從幾個UI組件製作UI組件

我創建了一個擴展Textview的UI組件「compTV」。它工作得很好。 現在我想創建一個由3個「compTV」相鄰的用戶界面元組「3compTV」。

如果我只是擴展Activity,創建LinearLayout並添加3個「compTV」的代碼效果非常好。 但是如何創建一個組件呢? 我需要爲「3compTV」組件擴展哪些類別,還有什麼是必需的。 當我擴展compTV只會繪製一個對象。所以我想我必須擴展一個不同的課程或採取其他方法解決這個問題。

感謝您的支持

public class 3compTV extends compTV{ 

Context ctx; 
int layoutMaringLeft = 100; 
int layoutMaringRight = 0; 
int layoutMaringTop = 0; 
int layoutMaringBottom = 0; 
int amountOfComponents = 5; 

public components(Context context) { 
    super(context); 
    ctx = context; 
    Log.d(ctx.getString(R.string.app_name), "components, Constructor1"); 
    compTV comp1 = new compTV(ctx); 
    compTV comp2 = new compTV(ctx); 
    compTV comp3 = new compTV(ctx); 

    comp2.setLetter("A"); 
    comp2.setState("grey"); 
    comp3.setLetter("A"); 
    comp3.setState("grey"); 
    LinearLayout LL2 = new LinearLayout(ctx); 
    LL2.setOrientation(LinearLayout.VERTICAL); 

    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.WRAP_CONTENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT); 

    layoutParams.setMargins(layoutMaringLeft, layoutMaringTop, 
      layoutMaringRight, layoutMaringBottom); 

    LL2.addView(comp1, layoutParams); 

    comp1.setLetter("H"); 
    comp1.setState("green"); 
    LL2.addView(comp2, layoutParams); 
    LL2.addView(comp3, layoutParams); 

} 

public components(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    ctx = context; 
    Log.d(ctx.getString(R.string.app_name), "components, Constructor2"); 


} 

public components(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    ctx = context; 
    Log.d(ctx.getString(R.string.app_name), "components, Constructor3"); 
} 
} 

回答

0

請擴展LinearLayout和包含的compTV 3個實例的視圖。

public class 3CompTV extends LinearLayout { 

    public 3CompTV(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setOrientation(LinearLayout.VERTICAL); 

     for (int i = 0; i < 3; i++) { 
      addView(new CompTV(context));  
     } 
    } 
} 

我個人的偏好是把3點CompTV意見在XML佈局,用他們的父元素爲<merge>。這使您可以在XML中指定其屬性,如wrap_content,我發現它更清晰。您可以將它們添加到您的自定義視圖中,如下所示:

public class 3CompTV extends LinearLayout { 

    public 3CompTV(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setOrientation(LinearLayout.VERTICAL); 
     View.inflate(context, R.id.three_comp_tvs, this);   
    } 
}