2011-05-05 71 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