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
规则不起作用......
你的覆盖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>资源.
| 归档时间: |
|
| 查看次数: |
853 次 |
| 最近记录: |