我正在尝试对齐RelativeLayout上方的自定义View对象和aligned_left。我的(剪切)代码看起来像这样:
int bored = board.getId(); //board is the RelativeLayout
Border border = new Border();
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_LEFT, bored);
params.addRule(RelativeLayout.ABOVE, bored);
this.addView(border,params);
这给了我一个Border对象aligned_left和我的RelativeLayout但不是“ABOVE”(技术上,它在它上面,但它在屏幕的顶部没有按照它应该的方式对齐)。而且,即使是陌生人,当我这样做时:
int bored = board.getId();
Border border = new Border();
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_LEFT, bored);
params.addRule(RelativeLayout.BELOW, bored); //<---The only difference
this.addView(border,params);
......它完美无缺。它以预期的方式左右对齐。为什么ABOVE属性给了我这么难的时间?
编辑:
ABOVE应该将一个视图的底边与目标的顶边对齐。这是我的项目如何按预期工作的屏幕截图
屏幕顶部的绿色条是我试图对齐的Border对象。如您所见,它的左边缘与“board”对齐,但它位于屏幕顶部的错误位置。
答案 0 :(得分:2)
您可以查看board
和Border
是否使用了更多空间吗?例如,通过将背景设置为颜色以在屏幕中查看其尺寸?
也许board
,你提到的是RelativeLayout
比你想象的要大。
我希望这会有所帮助
答案 1 :(得分:2)
我通过使用ImageView而不是我的自定义Border类(基本上只是从资源绘制到画布的位图)修复了我的问题。我的代码现在看起来像这样:
int bored = board.getId(); //board is the RelativeLayout
ImageView border = new ImageView(this);
border.setImageResource(R.drawable.border_tiki1);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_LEFT, bored);
params.addRule(RelativeLayout.ABOVE, bored);
this.addView(border,params);
我最好的猜测是,在为自定义对象定义ABOVE
常量时遇到了问题。感谢所有花时间看这个的人。以下是我现在的观点:
从这个锚点开始,我将用其他小块来构建边界的其余部分。再次感谢!
答案 2 :(得分:1)
如果没有看到剩下的代码,这只是猜测,但创建对象的顺序会对对象的布局方式产生影响。特别是涉及相对布局的地方。