首页 文章

对齐自定义RelativeLayout的底部

提问于
浏览
0

让我们说我有一个自定义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 回答

  • 0

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

    相反,请尝试以下方法:

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

    通常,在代码中放置大小并不是一个好主意 . 相反,请考虑使用具有固定大小layout_width和layout_height的样式,或者至少使用 <dimen> 资源 .

  • 5

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

相关问题