0

可以说我有一个自定义的 RelativeLayout 覆盖 onMeasure :

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    setMeasuredDimension(200, 200);
}

现在我想在这个布局中添加一个与这个自定义相对布局底部对齐的视图。但我尝试了不同的东西但没有任何结果:

paramsButton.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
addView (mButton, paramsButton);

我的第一个猜测是将底部与父级对齐(应该是自定义的 RelativeLayout 吧?)。但显然,它与我的自定义布局的父级对齐(这是另一个 RelativeLayout,这次不是自定义的。

所以我试图与 id 对齐:

paramsButton.addRule(RelativeLayout.ALIGN_BOTTOM, getId());
addView (mButton, paramsButton);

但它也不起作用(按钮消失) 注意:我明确设置了我的自定义 RelativeLayout 的 id,以检查 android 是否获得了正确的 id。

您知道如何进行这项工作吗?

编辑: 有趣的事情:它适用于以下规则

paramsButton.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
addView (mButton, paramsButton);

所以我不得不说我真的不明白为什么

相对布局.ALIGN_PARENT_BOTTOM

规则不起作用...

4

2 回答 2

5

您的覆盖onMeasure方法有缺陷。在这种情况下,布局会测量其子级(并存储它们的大小),然后您只告诉布局(而不是子级)您实际上改变了主意并希望更改该大小。

相反,请尝试以下操作:

widthMeasureSpec = MeasureSpec.makeMeasureSpec(200, MeasureSpec.EXACTLY);
heightMeasureSpec = MeasureSpec.makeMeasureSpec(200, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);

一般来说,将大小放入代码中并不是一个好主意。相反,请考虑使用具有固定大小 layout_width 和 layout_height 的样式,或者至少使用<dimen>资源。

于 2013-04-08T23:19:58.180 回答
0

您是否尝试在按钮上方放置另一个 RelativeLayout/LinearLayout 或任何其他布局/小部件并将其 layout_weight 设置为 1?通过设置 layout_weight 它将使按钮上方的小部件仅占用此自定义 RelativeLayout 内的剩余空间。

于 2013-04-06T19:58:37.317 回答