只有一些布局参数可以工作

时间:2011-03-26 08:33:54

标签: java android layout android-layout

我正在尝试对齐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应该将一个视图的底边与目标的顶边对齐。这是我的项目如何按预期工作的屏幕截图 enter image description here

屏幕顶部的绿色条是我试图对齐的Border对象。如您所见,它的左边缘与“board”对齐,但它位于屏幕顶部的错误位置。

3 个答案:

答案 0 :(得分:2)

您可以查看boardBorder是否使用了更多空间吗?例如,通过将背景设置为颜色以在屏幕中查看其尺寸?

也许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常量时遇到了问题。感谢所有花时间看这个的人。以下是我现在的观点:

enter image description here

从这个锚点开始,我将用其他小块来构建边界的其余部分。再次感谢!

答案 2 :(得分:1)

如果没有看到剩下的代码,这只是猜测,但创建对象的顺序会对对象的布局方式产生影响。特别是涉及相对布局的地方。