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
我有这个代码:
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