gpt4 book ai didi

android - RelativeLayout 上面的 LayoutParams

转载 作者:行者123 更新时间:2023-11-30 03:14:37 25 4
gpt4 key购买 nike

我有两个 View ,比方说 A 和 B。我希望 A 垂直放置在 B 上方,但与 B 水平居中对齐,即我想实现这一点:

enter image description here

我试过:

RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)
viewA.getLayoutParams();
layoutParams.addRule(
RelativeLayout.ABOVE,
viewB.getId()
);

但显然它所做的是将 A 垂直放置在 B 上方,但水平 float 到左侧(与 X 的左侧对齐)

请帮忙。

最佳答案

你所拥有的是在正确的路径上,但你还需要为水平居中添加一个规则:layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);

我认识到这并不完全符合您的要求,因为它指定您在父 View 中水平居中,而不是指定您对齐 A 和 B 的水平中心,但没有直接的使用 RelativeLayout 规则执行后者的方法。 (有许多间接方法可以代替。)


添加:
鉴于您的 View A 没有在父 View 中水平居中,这里有一个建议。我不知道执行此操作的好方法/非 hacky 方法,但我认为由于在测量过程中应用了 RelativeLayout 规则,因此您可以使用 View A 的左(和右)坐标> 完成测量后,将 View B 的(公共(public))leftright 属性设置为它们需要的值,以便居中在 A 下查看。

例如,如果您的父 View 是 View 的自定义扩展,您可以覆盖其 onMeasure() 方法,调用方式如下:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec); // So that mA.left and mA.right first get set...
mB.left = BWIDTH - (mA.left + mA.right) / 2;
mB.right = mB.left + BWIDTH;
/* You probably will need to re-measure (i.e., call super.onMeasure() again here)
* if you need to get views X and Y to the left of view B or if
* if view B exceeds the previously-measured size... */
}

如果没有,您可以在父级上使用 setOnLayoutChangeListener() 和回调来实现相同的目的。

关于android - RelativeLayout 上面的 LayoutParams,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20337316/

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