简短而温馨的总结:
当一个类从View
派生到ViewGroup
派生时,传递给onSizeChanged
的高度和/或宽度参数在LinearLayout中使用时对我的类不一致。当使用ViewGroup作为超类以实现一致的结果时,是否有任何额外的信息需要提供?
长版:
我已经创建了一个自定义的视图派生的视觉控件,我使用像自定义按钮。我从View派生,然后像这样把它添加到我的布局中:
类声明:
public class GameButton extends View {
xml: <LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dip"
android:orientation="horizontal"
android:layout_weight="1">
<com.myname.myapp.controls.GameButton
android:id="@+id/button1"
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1" />
我想得到一点花哨的控制,所以我已经改变了它从ViewGroup或ViewGroup的任何子类派生(目前试图使它成为一个RelativeLayout,例如)。只要我这样做,它就消失了。
我添加了日志记录来查看传递给onsizechange的值,并且我得到0高度被传递给onsizechange为我的控件的每个实例,没有改变布局xml(上面),否则当我直接从视图派生。
我是否需要添加任何额外的提示,参数或布局参数无论是到xml或在代码从视图切换到ViewGroup?
您需要实现onMeasure()来告诉工具包您的大小(您必须在onMeasure()的末尾调用setMeasuredDimension())。ViewGroup,默认情况下,根据它们的子元素来计算它们的大小这里没有,所以大小是0x0