Вы можете сделать это программно следующим образом:
private GridLayout setUpGrid(List<PictureUrlWithStatus> picWithStatusList) {
if (picWithStatusList == null) { // No Photos present i.e. no Photos are added
return null;
}
GridLayout.LayoutParams gridLayoutParams = new GridLayout.LayoutParams();
gridLayoutParams.height = LayoutParams.MATCH_PARENT;
gridLayoutParams.width = LayoutParams.MATCH_PARENT;
GridLayout gridLayout = new GridLayout(this);
gridLayout.setLayoutParams(gridLayoutParams);
gridLayout.removeAllViews();
int total_gridCount = picWithStatusList.size();
int column = 3;
int rowSize = total_gridCount/column;
gridLayout.setColumnCount(column);
//(For First Image which occupies 2 rows), If you are drawing less than 3 images, use 2 rows, else setRowCount as the default (rowSize + 1), extra as the first Image occupies 2 rows and still draws only 3 images.
if (rowSize == 0)
gridLayout.setRowCount(2);
else
gridLayout.setRowCount(rowSize + 1);
for (int c = 0;/*getcount from picWithStatusList*/; c++) {
RelativeLayout.LayoutParams imageLayoutParam = new RelativeLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
//The ImageView to load image
ImageView profilePic = new ImageView(this);
profilePic.setImageDrawable(getResources().getDrawable(
R.drawable.ic_launcher));
profilePic.setScaleType(ScaleType.CENTER_CROP);
profilePic.setLayoutParams(imageLayoutParam);
RelativeLayout.LayoutParams picstatusLayoutParam = new RelativeLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
picstatusLayoutParam.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
//The View for Text written Below Image
TextView profilePicStatus = new TextView(this);
profilePicStatus.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10);
profilePicStatus.setGravity(Gravity.CENTER_HORIZONTAL);
profilePicStatus.setPadding(0, 2, 0, 0);
profilePicStatus.setLayoutParams(picstatusLayoutParam);
RelativeLayout.LayoutParams contentLayoutParams = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
contentLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
RelativeLayout contentLayout = new RelativeLayout(this);
contentLayout.addView(profilePic);
contentLayout.addView(profilePicStatus);
contentLayout.setLayoutParams(contentLayoutParams);
if (c >= 0) {
if (c == 0) {
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
2 * width/3, 2 * width/3);
GridLayout.LayoutParams param = new GridLayout.LayoutParams(
layoutParams);
param.setGravity(Gravity.CENTER);
param.columnSpec = GridLayout.spec(c, 2);
param.rowSpec = GridLayout.spec(0, 2);
//Load image into profilePic (ImageView), I am assuming you have imageurl in profilePicWithStatus
//The text written on top of the images.
profilePicStatus.setText(c + " ");
contentLayout.setLayoutParams(param);
} else {
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
1 * width/3, 1 * width/3);
GridLayout.LayoutParams param = new GridLayout.LayoutParams(
layoutParams);
param.setGravity(Gravity.CENTER);
//Load image into profilePic (ImageView), I am assuming you have imageurl in profilePicWithStatus
//The Text to be written on the top of image with align bottom
profilePicStatus.setText(c + " ");
contentLayout.setLayoutParams(param);
}
}
gridLayout.addView(contentLayout);
}
return gridLayout;
}
Кроме того,
PictureUrlWithStatus класс следующим образом:
private class PictureUrlWithStatus {
// url is the Picture url and status will be 'Y'/'y' or 'N'/'n'
String url, status;
public PictureUrlWithStatus(String pictureUrl, String pictureStatus) {
this.url = pictureUrl;
this.status = pictureStatus;
}
}
Это должно установить вас
Roadblock вы можете показать мне больше? от макета до кода ?! Мне нужно больше кода от вас, не могу это понять! –
Вам необходимо создать макеты программно. Я сделал проверку, что если я создаю первое изображение, то он должен занимать 2/3 ширины и 2/3 высоты (занимая пространство, эквивалентное 2 строкам и 2 столбцам в терминах сетки). Это получает компенсацию против 2 изображений, нарисованных по одному в каждой строке. Для остальных случаев вам нужно нарисовать 1/3 ширины и 1/3 высоты. и такие условия следуют .... – Roadblock
Макет содержания содержит элементы каждой сетки, а изображение открывается с помощью LinearLayout.Layoutparams. Как только вы подготовите его в соответствии с размером макета, вы добавите этот макет к исходному элементу gridLayout – Roadblock