gpt4 book ai didi

android - 如何在 Viewgroup 类中正确覆盖 onLayout 方法

转载 作者:行者123 更新时间:2023-11-30 01:56:00 25 4
gpt4 key购买 nike

我有一个从 View 组类扩展而来的类。现在我知道在 onLayout 中你必须调用每个 child 的布局方法。这里的问题是应该将哪些值传递给子布局。

在我看来,我膨胀了一个 xml 并将其附加到此类(宽度和高度在 xml 中定义)。在 onlayout 中,我得到一个正确的子计数,但子项的宽度和高度返回 0。我如何获得子项的宽度和高度。

如果我在其中设置位置和测量值,那么 onmeasure 方法的用途是什么?我以为我们应该测量那里的 child 。

下面是一些源码供引用。

public BaseWidget(Context context, int resourceId) {
super(context);
initWithResourceID(resourceId);
}

private void initWithResourceID(int resourceId) {
inflate(getContext(), resourceId, this);
}

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
final int count = getChildCount();
for (int i = 0; i < count; i++) {
View child = getChildAt(i);
getChildAt(i).layout(l, t, r, b);
// getChildAt(i).layout((int)child.getX(), (int)(child.getY() + child.getMeasuredHeight()), (int) (child.getX() + child.getMeasuredWidth()), (int)child.getY());
}
}

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="150dp"
android:layout_height="90dp"
android:background="@color/ripple_material_light"
android:orientation="vertical"
android:padding="20dp">

<RelativeLayout
android:id="@+id/texts"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="1" />

<TextView
android:id="@+id/asideTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="2" />
</RelativeLayout>

<View
android:id="@+id/detailedView"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

</View>
</LinearLayout>

当我调用 getChildAt(i).layout(l, t, r, b); 时,子项绘制在整个父项上。

当我打电话

getChildAt(i).layout((int)child.getX(), (int)(child.getY() + 
child.getMeasuredHeight()), (int) (child.getX() +
child.getMeasuredWidth()), (int)child.getY());

什么都没有画

所以基本上我想知道我们应该将什么传递给 child .. onmeasure 和 onlayout 之间的主要区别是什么。我希望我把我的问题说清楚。

最佳答案

在尝试获取其高度和宽度之前,您必须先测量子项。在 onLayout 中,您决定 child 的位置。测量后,您将拥有所有 child 的高度和宽度,然后借助它,您可以定位 child 。您可以根据它的高度和宽度设置它的左、右、上、下点。比如你想把child定位在(0,0),那么在onLayout中

child.layout(0,0,child.getMeasuredWidth(), child.getMeasuredHeight());

如果正确和底部点提到错误, View 可能会缩小/放大/缩小。

关于android - 如何在 Viewgroup 类中正确覆盖 onLayout 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32219784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com