对齐自定义RelativeLayout的底部

Ale*_*eks 0 android android-custom-view relativelayout android-layout

让我们说我有一个自定义RelativeLayout覆盖onMeasure:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    setMeasuredDimension(200, 200);
}
Run Code Online (Sandbox Code Playgroud)

现在,我想在此布局中添加一个与此Custom RelativeLayout底部对齐的视图.但我尝试了不同的事情,没有任何结果:

paramsButton.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
addView (mButton, paramsButton);
Run Code Online (Sandbox Code Playgroud)

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

所以我尝试与id对齐:

paramsButton.addRule(RelativeLayout.ALIGN_BOTTOM, getId());
addView (mButton, paramsButton);
Run Code Online (Sandbox Code Playgroud)

但它也没有工作(按钮消失)注意:我明确地设置我的自定义RelativeLayout的id来检查android确实得到了正确的id.

你知道怎么做这个工作吗?

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

paramsButton.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
addView (mButton, paramsButton);
Run Code Online (Sandbox Code Playgroud)

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

RelativeLayout.ALIGN_PARENT_BOTTOM

规则不起作用......

Del*_*yan 5

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

相反,请尝试以下方法:

widthMeasureSpec = MeasureSpec.makeMeasureSpec(200, MeasureSpec.EXACTLY);
heightMeasureSpec = MeasureSpec.makeMeasureSpec(200, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Run Code Online (Sandbox Code Playgroud)

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