アプリケーションでGridLayout
sを表示するためにImageView
(support)を使用しています。 3列と5行があります。問題は、GridLayout
内のセルが自動的にそれらの間にいくらかのスペースを取得することです。セルにパディングやマージンを設定していません。下の画像を参照してください。すべてのセルは動的に追加されます。これらのセルを追加する方法は次のとおりです。
画面の幅と高さの取得:
Point size = new Point();
getWindowManager().getDefaultDisplay().getSize(size);
screenWidth = size.x;
screenHeight = size.y;
rowHeight = (int) (screenHeight * 0.2);
GridLayoutへのビューの追加:
GridLayout.LayoutParams params = new GridLayout.LayoutParams(
getSpec(rowColumn[0]), getSpec(rowColumn[1]));
params.height = rowHeight;
if (rowColumn[1].equalsIgnoreCase("col_full")) {
params.width = (int) (screenWidth);
} else if (rowColumn[1].equalsIgnoreCase("col_two_part")) {
params.width = (int) (screenWidth * 0.6);
} else {
params.width = (int) (screenWidth * 0.3);
}
ImageButton image = (ImageButton) imageHashMap
.get(reOrderedButtonsListCopy.get(i));
image.setLayoutParams(params);
gridLayout.addView(image, params);
XMLレイアウト:
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res/com.xx.xxx"
Android:id="@+id/scrollView1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" >
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical" >
<Android.support.v7.widget.GridLayout
xmlns:app="http://schemas.Android.com/apk/res/com.xx.xxx"
Android:id="@+id/gridlayout_main"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_margin="2dp"
app:columnCount="3"
app:rowCount="5" >
</Android.support.v7.widget.GridLayout>
</LinearLayout>
</ScrollView>
現在の結果:
赤い線はセル間のスペースを示しています。また、GridLayoutの左側にスペースがあります。 2dp
をlayout_margin
として指定しただけです。このパディングが発生する理由は何ですか?
[編集]
次の変更を行うと、間隔が削除されました。
gridLayout = (GridLayout) findViewById(R.id.gridlayout_main);
gridLayout.setUseDefaultMargins(false);
gridLayout.setAlignmentMode(GridLayout.ALIGN_BOUNDS);
gridLayout.setRowOrderPreserved(false);
下の画像を参照してください。
解決策を見つけました。
次の変更を行うと、間隔が削除されました。
gridLayout = (GridLayout) findViewById(R.id.gridlayout_main);
gridLayout.setUseDefaultMargins(false);
gridLayout.setAlignmentMode(GridLayout.ALIGN_BOUNDS);
gridLayout.setRowOrderPreserved(false);
下の画像を参照してください。