繁体   English   中英

Android 自定义视图布局问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM