这是可能的,但比将按钮包含在同一布局中更复杂。如果您绝对不想这样做,则不能使用 XML(它总是更快)。您必须在代码中执行 3 个步骤:
1.) 等到视图被绘制
private void waitForViewToBeDrawn(){
// get your layout
final RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.mainLayout);
ViewTreeObserver vto = mainLayout.getViewTreeObserver();
// add a listener
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
// you also want to remove that listener
mainLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
// go on to next step
getPositionOfImageView();
}
});
}
这种方法最适合我,但如果您遇到问题 -这里有一些替代方案。当您使用 API 级别 11 及更高级别时,还有 [更多解决方案][2]...
2.) 获取 imageView 的顶部位置
private void getPositionOfImageView(){
ImageView imageView = (ImageView) findViewById(R.id.imageView);
// Top position view relative to parent (Button and ImageView have same parent)
int topCoordinate = imageView.getTop();
adjustButton(topCoordinate);
}
3.) 添加或调整按钮以与图像对齐
public void adjustButton(int topCoordinate){
Button button = (Button) findViewById(R.id.button);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.topMargin = topCoordinate;
button.setLayoutParams(params);
}
通过使用 API 11,这一步会更顺畅:button.setTop(topCoordinate)
当然你可以把它全部缩短并放在一个单一的方法中,只是认为3个步骤更好地解释。希望代码有助于入门!