You don't need to specify all these different sizes to achieve a screen as simple as that one. Simply play a bit around with layouts. For example let's take your first screen. You could use a TableLayout or even a vertical LinearLayout with N LinearLayout inside. At this point simply use weights! Example: want a grid of two rows and three square images for each row:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight=".33" />
<ImageView
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight=".33" />
<ImageView
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight=".33" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight=".33" />
<ImageView
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight=".33" />
<ImageView
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight=".33" />
</LinearLayout>
Now unfortunately that's still not enough for you. Another thing you might want to accomplish is to still have your images have a square ratio. To achieve that simply extend image view like this:
public class SquaredImageView extends ImageView {
public SquaredImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = width;
setMeasuredDimension(width, height);
}
}
Now simply provide images in the right densities and everything will look exactly as you want