[英]Android custom view layout issues
简短而甜蜜的总结:
在将 class 从View
派生更改为ViewGroup
派生时,在 LinearLayout 内部使用时,传递给onSizeChanged
的高度和/或宽度参数与我的 class 不一致。 将 ViewGroup 用作超级 class 以获得一致的结果时,是否需要提供任何其他信息?
长版:
我创建了一个自定义视图派生的可视控件,我正在使用它,就像自定义按钮一样。 我从 View 派生,然后将其添加到我的布局中,如下所示:
class 声明:
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)。 一旦我这样做,它就会消失。
我添加了日志记录以查看传递给 onSizeChanged 的值,并且对于我的控件的每个实例,我都将 0 高度传递给 onSizeChanged,而没有更改布局 xml(上图),否则当我直接从 View 派生时,它可以正常工作。
从 View 切换到 ViewGroup 时,是否需要向 xml 或代码中添加任何其他提示、参数或布局参数?
您需要实现 onMeasure() 来告诉工具包您的大小(您必须在 onMeasure() 结束时调用 setMeasuredDimension()。)默认情况下,ViewGroup 根据他们的孩子计算他们的大小,而您没有任何这里,所以大小是0x0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.