此bounty已结束。此问题的答案有资格获得+50声望奖励。赏金宽限期16小时后结束。IRON MAN正在寻找一个规范答案。
我正在使用相对布局来动态构建视图/网格...
例如:如果有1个用户,
[ grid with users 1 ] 1
如果有2个用户,
[ grid with users 2 ] 2
如果有3个用户,
[ grid with user 3 ] 3
如果有4个用户,则上面2个,下面2个
如果有5个,则[grid with user 5] 4
如果有6个。[ grid with user 6 ] 5
我的准则是
private RelativeLayout.LayoutParams[] getgrid(int size) {
int width = Math.max(getMeasuredWidth(),getMeasuredHeight());
int height = Math.min(getMeasuredWidth(),getMeasuredHeight());
RelativeLayout.LayoutParams[] array =
new RelativeLayout.LayoutParams[size];
for (int i = 0; i < size; i++) {
if (i == 0) {
array[0] = new RelativeLayout.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT);
array[0].addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
} else if (i == 1) {
array[1] = new RelativeLayout.LayoutParams(width / 2, height);
array[0].width = array[1].width;
array[1].addRule(RelativeLayout.RIGHT_OF, mUserViewList.get(mUidList.get(0)).getId());
array[1].addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
// array[1].addRule(RelativeLayout.ALIGN_PARENT_BOTTOM,RelativeLayout.TRUE);
} else if (i == 2) {
array[i] = new RelativeLayout.LayoutParams(width / 3, height);
array[1].width = array[i].width;
array[0].width = array[i].width;
//array[i].addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
array[i].addRule(RelativeLayout.RIGHT_OF, mUserViewList.get(mUidList.get(1)).getId());
} else if (i == 3) {
array[i] = new RelativeLayout.LayoutParams(width / 2, height / 2);
array[0].width = array[i].width;
array[1].width = array[i].width;
array[i - 1].width = array[i].width;
array[0].height = array[i].height;
array[1].height = array[i].height;
array[i - 1].height = array[i].height;
array[i - 1].addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
array[i].addRule(RelativeLayout.ALIGN_PARENT_RIGHT, 0);
array[i - 1].addRule(RelativeLayout.BELOW, mUserViewList.get(mUidList.get(0)).getId());
array[i].addRule(RelativeLayout.BELOW, mUserViewList.get(mUidList.get(1)).getId());
array[i].addRule(RelativeLayout.RIGHT_OF, mUserViewList.get(mUidList.get(i - 1)).getId());
} else if (i == 4) {
array[i] = new RelativeLayout.LayoutParams(width / 3, height / 2);
array[0].width = array[i].width;
array[1].width = array[i].width;
array[2].width = array[i].width;
array[3].width = array[i].width;
array[0].setMargins(width / 6, 0, 0, 0);
array[i].addRule(RelativeLayout.RIGHT_OF, mUserViewList.get(mUidList.get(i - 1)).getId());
array[i].addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
} else if (i == 5) {
array[i] = new RelativeLayout.LayoutParams(width / 3, height / 2);
array[0].setMargins(0, 0, 0, 0);
array[i].addRule(RelativeLayout.RIGHT_OF, mUserViewList.get(mUidList.get(1)).getId());
array[i].addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
}
}
return array;
}
问题是有另一个视图的权利,除了相对布局,所以基本上它没有得到平等的划分和扭曲,以及(扭曲意味着一些网格没有覆盖整个高度)
请参考:-- [issue with 6] 6
[issue with 3] 7等
请帮助我提前感谢
1条答案
按热度按时间sf6xfgos1#
为了使动态视图如您所见,我编写了以下代码:
注意:5视图有一个例外,因为它需要 Package 在另一个视图中(在我的例子中,线性布局)。
当前,相对布局的宽度和高度固定如下:
整个活动代码: