Java 只有一些布局参数起作用

Java 只有一些布局参数起作用,java,android,layout,android-layout,Java,Android,Layout,Android Layout,我正在尝试将自定义视图对象与RelativeLayout的左上方对齐。我截取的代码如下所示: int bored = board.getId(); //board is the RelativeLayout Border border = new Border(); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CO

我正在尝试将自定义视图对象与RelativeLayout的左上方对齐。我截取的代码如下所示:

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);
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);
这给了我一个边框对象,它与我的RelativeLayout左对齐,但技术上不在上面,它在它上面,但它在屏幕顶部,没有按照它应该的方式对齐。更奇怪的是,当我这么做的时候:

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);
…它工作得很好。它以预期的方式左下对齐。为什么上面的属性让我如此艰难

编辑: 上面应该将一个视图的下边缘与目标的上边缘对齐。下面是一个屏幕截图,显示了我的项目如何无法按预期工作。

屏幕顶部的绿色条是我试图对齐的边框对象。如您所见,它的左边缘与电路板对齐,但它在屏幕顶部的位置不正确。

您能检查电路板和边框是否占用了更多空间吗?例如,将背景设置为一种颜色,以便在屏幕上查看其尺寸

也许董事会,你提到的是一个相对人,你的想法更大


我希望这有助于

不要看到代码的其余部分,这只是一个猜测,但对象的创建顺序会对对象的布局产生影响。尤其是在涉及相对布局的情况下。

我通过使用ImageView而不是自定义边框类解决了问题,自定义边框类基本上只是从资源绘制到画布的位图。我的代码现在如下所示:

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);
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);
我最好的猜测是,它在为我的自定义对象定义上述常量时遇到了问题。感谢所有花时间看这个的人。以下是我现在的观点:


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

你能发布一些截图吗?什么是预期的方式和顶部,但没有按照预期的方式对齐?我添加了屏幕截图,并试图更清楚地阐述。您测试的是哪个Android版本?一些版本