让我们说我有一个自定义RelativeLayout覆盖onMeasure:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(200, 200);
}
现在,我想在此布局中添加一个与此Custom RelativeLayout底部对齐的视图 . 但我尝试了不同的事情,没有任何结果:
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 .
你知道怎么做这个工作吗?
EDIT : 有趣的是:它适用于以下规则
paramsButton.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
addView (mButton, paramsButton);
所以我不得不说我真的不明白为什么
RelativeLayout.ALIGN_PARENT_BOTTOM
规则不起作用......
2 回答
你覆盖
onMeasure
的方法是有缺陷的 . 在这种情况下,布局测量其子项(并存储它们的大小),然后您只是告诉您实际改变主意并希望更改该大小的布局(而不是子项) .相反,请尝试以下方法:
通常,在代码中放置大小并不是一个好主意 . 相反,请考虑使用具有固定大小layout_width和layout_height的样式,或者至少使用
<dimen>
资源 .您是否尝试将另一个RelativeLayout / LinearLayout或任何其他布局/小部件放在按钮上方并将其layout_weight设置为1?通过设置layout_weight,它将使按钮上方的窗口小部件仅占用此自定义RelativeLayout中的剩余空间 .