Android 如何将布局置于其他布局之下

How to put a layout below other layout in Android

我有这个代码:

RelativeLayout frame = new RelativeLayout(activity);

RelativeLayout layout = new RelativeLayout(this);
RelativeLayout.LayoutParams dateArea = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.MATCH_PARENT,90
);                
dateArea.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

DisplayMetrics displayMetrics = this.getResources().getDisplayMetrics();
int height = displayMetrics.heightPixels;
RelativeLayout mapLayout = new RelativeLayout(this);
RelativeLayout.LayoutParams mapParam = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.MATCH_PARENT,
    height-120
);

frame.addView(mapLayout,mapParam);
frame.addView(layout, dateArea);

我希望日期区域在地图底部和下方对齐。但是它总是在顶部对齐,真的很奇怪,请告诉我这段代码有什么问题?

这样做

RelativeLayout layout = new RelativeLayout(this);
RelativeLayout.LayoutParams dateArea = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT, 
90);

dateArea .addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

RelativeLayout 可用于将任何视图相对于其他视图进行相对偏移。

  • 你需要在 say res/values/properties.xml 中定义一个 id(如果不存在则创建一个文件,或者如果你愿意,可以使用任何其他文件)

    <resources> <item name="layout" type="id"/> </resources>

  • 然后分配这个id - layout.setId(R.id.layout)

  • 这样你就不需要获取屏幕高度而是添加另一个规则mapParam.addRule(RelativeLayout.ABOVE, R.id.layout)

然后更改您的代码:

RelativeLayout.LayoutParams dateArea = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 90);
dateArea.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
RelativeLayout layout = new RelativeLayout(this);
layout.setId(R.id.layout);

RelativeLayout.LayoutParams mapParam = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
mapParam.addRule(RelativeLayout.ABOVE, R.id.layout);
RelativeLayout mapLayout = new RelativeLayout(this);

RelativeLayout frame = new RelativeLayout(this);
frame.addView(mapLayout,mapParam);
frame.addView(layout, dateArea);
// TODO Don't forget to add 'frame' or it won't show anything