Android 将栅格视图与其他视图对齐

Android 将栅格视图与其他视图对齐,android,gridview,Android,Gridview,我有一个图像视图。在它下面,我想有一个GridView包含许多较小的图像。我希望它看起来整洁。。。每行4个,顶部和底部间隔均匀 目前,间距还不算太差(尽管在我看来,从左到右的间距看起来比从上到下的间距要小一些),但我真正需要解决的是最右边的额外边距 我希望网格视图中图像的右边缘与大图像的右边缘完美对齐。我做错了什么 以下是我目前拥有的图像: 以下是我的布局: <LinearLayout android:layout_width="match_par

我有一个
图像视图
。在它下面,我想有一个
GridView
包含许多较小的图像。我希望它看起来整洁。。。每行4个,顶部和底部间隔均匀

目前,间距还不算太差(尽管在我看来,从左到右的间距看起来比从上到下的间距要小一些),但我真正需要解决的是最右边的额外边距

我希望网格视图中图像的右边缘与大图像的右边缘完美对齐。我做错了什么

以下是我目前拥有的图像:

以下是我的布局:

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">



            <ImageView
                android:id="@+id/items_image"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/placeholder"
                android:scaleType="fitStart"
                android:adjustViewBounds="true"
                style="@style/ItemsImage" />

            <GridView
                android:id="@+id/items_all_images"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:numColumns="4"
                android:stretchMode="columnWidth"
                android:clipToPadding="false"
                android:scrollbarStyle="outsideOverlay"


                android:verticalSpacing="20dp"


                style="@style/ItemsImage"
                />

        </LinearLayout>

    </LinearLayout>


ItemsImage样式如下所示:

<style name="ItemsImage">
    <item name="android:gravity">top|left</item>
    <item name="android:layout_gravity">top|left</item>
    <item name="android:paddingRight">25dp</item>
</style>

左上角
左上角
25dp

我不知道这是最好的方法,但它可以解决问题。 将以下行添加到活动的onCreate方法中:

YOUR_GRIDVIEW.post(new Runnable()
{
    @Override
    public void run(){
    YOUR_GRIDVIEW.setWidth(YOUR_IMAGE.getWidth());
    }
});

我不知道这是最好的方法,但它可以解决问题。 将以下行添加到活动的onCreate方法中:

YOUR_GRIDVIEW.post(new Runnable()
{
    @Override
    public void run(){
    YOUR_GRIDVIEW.setWidth(YOUR_IMAGE.getWidth());
    }
});

在gridView中为栅格和图像定义固定宽度和高度。在网格实例初始化后的代码中,可以如下设置间距

GridView gridView;
int gridWidth = 1280;
int gridHeight = 500;
int gridItemWidth = 60;
int gridItemHeight = 50;
int gridRows = 3, gridColumns = 4;
int vSpacing = (gridHeight - (gridItemHeight * gridRows))/gridRows;
int hSpacing = (gridWidth - (gridItemWidth * gridColumns))/gridColumns;
gridView.setLayoutParams(new LayoutParams(gridWidth, gridHeight));  

gridView.setColumnWidth(gridItemWidth);
gridView.setNumColumns(gridColumns);

gridView.setHorizontalSpacing(hSpacing);
gridView.setVerticalSpacing(vSpacing);
将网格宽度设置为GridView上方大图像的大小。
希望对您有所帮助。

在gridView中为网格和图像定义固定宽度和高度。在网格实例初始化后的代码中,可以如下设置间距

GridView gridView;
int gridWidth = 1280;
int gridHeight = 500;
int gridItemWidth = 60;
int gridItemHeight = 50;
int gridRows = 3, gridColumns = 4;
int vSpacing = (gridHeight - (gridItemHeight * gridRows))/gridRows;
int hSpacing = (gridWidth - (gridItemWidth * gridColumns))/gridColumns;
gridView.setLayoutParams(new LayoutParams(gridWidth, gridHeight));  

gridView.setColumnWidth(gridItemWidth);
gridView.setNumColumns(gridColumns);

gridView.setHorizontalSpacing(hSpacing);
gridView.setVerticalSpacing(vSpacing);
将网格宽度设置为GridView上方大图像的大小。
希望能对你有所帮助。

我觉得重心应该是对称空间的中心。谢谢你的回复。如果我这样做了,那么在最左边缘和最右边缘都有相同大小的多余空间。我希望边缘与上面的
ImageView
均匀排列。我明白了,您不需要提供正确的填充,在XML中,设置网格宽度以匹配父级。请您进一步解释,我不明白?您在屏幕右侧看到的空白实际上是您在您的样式中提供的25dp填充。设置宽度以匹配家长会占据整个屏幕。我觉得重心应该是对称的。谢谢你的回复。如果我这样做了,那么在最左边缘和最右边缘都有相同大小的多余空间。我希望边缘与上面的
ImageView
均匀排列。我明白了,您不需要提供正确的填充,在XML中,设置网格宽度以匹配父级。请您进一步解释,我不明白?您在屏幕右侧看到的空白实际上是您在您的样式中提供的25dp填充。设置宽度以匹配父项将占据整个屏幕。
GridView
没有
setWidth()
功能吗?我明白了setColumnWidth@b85411然后使用setMinimumWidth方法老实说,我认为GridView的宽度没有问题。如果我给它一个黑色的背景,我可以看到它对齐。。。但是似乎在单个项目上有一些内部填充。
GridView
没有
setWidth()
函数?我明白了setColumnWidth@b85411然后使用setMinimumWidth方法老实说,我认为GridView的宽度没有问题。如果我给它一个黑色的背景,我可以看到它对齐。。。但似乎每个项目都有一些内部填充。