自定义控制中的通胀布局 - 如何?

时间:2011-05-05 17:07:01

标签: android android-layout

我已经知道如何在这里创建自定义控件: Android interface - need suggestions on what widgets to use

如何创建SAME,但是在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文章和样本说我可以,但如何?

1 个答案:

答案 0 :(得分:23)

你必须使用这样的布局:

<?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一样,所以你必须在外部布局中指定它是否是垂直的,或者你可以将它设置为默认的构造