gpt4 book ai didi

android - 自定义布局上的 Onlayout 方法扩展 LinearLayout

转载 作者:太空宇宙 更新时间:2023-11-03 10:48:43 28 4
gpt4 key购买 nike

我有一个扩展 LinearLayout 的自定义 View 。这个自定义 View 包含其他几个 View ,它们的布局应该与 LinearLayout 完全一样,但是,我没有设法正确地布局它们……所有的 subview 都在彼此之上,隐藏了之前添加的所有 subview 。

我的onLayout和onMeasure如下:

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
// Do nothing. Do not call the superclass method--that would start a layout pass
// on this view's children. PieChart lays out its children in onSizeChanged().
super.onLayout(changed, l, t, r, b);
Log.e(LOG_TAG, LOG_TAG + ".onLayout: " + l + ", " + t + ", " + r + ", " + b);

int iChildCount = this.getChildCount();
for ( int i = 0; i < iChildCount; i++ ) {
View pChild = this.getChildAt(i);
pChild.layout(l, t, pChild.getMeasuredWidth(), pChild.getMeasuredHeight());
}
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// Try for a width based on our minimum
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Log.d(LOG_TAG, LOG_TAG + ".onMeasure: width: " + widthMeasureSpec + " getWidth: " + MeasureSpec.getSize(widthMeasureSpec));
Log.d(LOG_TAG, LOG_TAG + ".onMeasure: height: " + heightMeasureSpec + " getHeight: " + MeasureSpec.getSize(heightMeasureSpec));
Log.d(LOG_TAG, LOG_TAG + ".onMeasure: getPaddingLeft: " + getPaddingLeft() + " getPaddingRight: " + getPaddingRight());
Log.d(LOG_TAG, LOG_TAG + ".onMeasure: getPaddingTop: " + getPaddingTop() + " getPaddingBottom: " + getPaddingBottom());

// http://stackoverflow.com/a/17545273/474330
int iParentWidth = MeasureSpec.getSize(widthMeasureSpec);
int iParentHeight = MeasureSpec.getSize(heightMeasureSpec);

this.setMeasuredDimension(iParentWidth, iParentHeight);

int iChildCount = this.getChildCount();
for ( int i = 0; i < iChildCount; i++ ) {
View pChild = this.getChildAt(i);
this.measureChild( pChild,
MeasureSpec.makeMeasureSpec(iParentWidth, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(iParentHeight, MeasureSpec.EXACTLY)
);
}
}

如何设置自定义 View 的 x 位置、y 位置、宽度和高度?我已将自定义 View 的 LayoutParam 设置为 WRAP_CONTENT,但是,它仍然表现得像 FILL_PARENT,占用了父级中所有可用的可用空间。似乎我所有改变位置或大小的努力都没有奏效(我什至尝试使用 setPadding 来控制位置)

最佳答案

我曾为同样的问题苦苦挣扎了一段时间。看起来好像已经过了很长时间才被问到,但这是我为让它工作所做的工作。也许它会帮助某人。

扩展 LinearLayout 意味着如果您希望它像 LinearLayout 一样显示您的 subview ,则不必重写 onLayout。要按预期进行布局,我所要做的就是删除我的 onLayout 方法并让 LinearLayout 类处理它。

关于android - 自定义布局上的 Onlayout 方法扩展 LinearLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17853522/

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