居中GridView的内容

时间:2013-05-02 16:05:19

标签: java android android-gridview

我的GridView本身居中,但其内容并未居中。这是一个屏幕,底部和右侧的浅蓝色是我设置的GridView的背景颜色。

enter image description here

您可以看到内容被推到顶部和左侧。我希望我的游戏板内容正好位于GridView的中间,浅蓝色的背景颜色同样围绕着所有方面。

这是我的XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/textFieldFU"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<GridView
    android:id="@+id/gridview"
    android:layout_marginTop="0dp"
    android:layout_marginLeft="45dp"
    android:layout_marginRight="45dp"
    android:layout_width="fill_parent"
    android:layout_height="485dp"
    android:gravity="center"
    android:horizontalSpacing="0dp"
    android:numColumns="8"
    android:background="@android:color/holo_blue_bright"
    android:verticalSpacing="0dp" />

我的getView课程中的ImageAdapter如果有帮助的话:

    @Override
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView iv;
    if (convertView != null) {
        iv = (ImageView) convertView;
    } else {
        iv = new ImageView(context);
        iv.setLayoutParams(new GridView.LayoutParams(60, 60));
        iv.setScaleType(ScaleType.FIT_CENTER);
        iv.setPadding(0, 0, 0, 0);
        if(position < 8 && position % 2 ==0){
            iv.setBackgroundColor(Color.DKGRAY);
        }
        else if(position > 7 && position < 16 && position % 2 ==1){
            iv.setBackgroundColor(Color.DKGRAY);
        }
        else if(position > 15 && position < 24 && position % 2 ==0){
            iv.setBackgroundColor(Color.DKGRAY);
        }
        else if(position > 23 && position < 32 && position % 2 ==1){
            iv.setBackgroundColor(Color.DKGRAY);
        }
        else if(position > 31 && position < 40 && position % 2 ==0){
            iv.setBackgroundColor(Color.DKGRAY);
        }
        else if(position > 39 && position < 48 && position % 2 ==1){
            iv.setBackgroundColor(Color.DKGRAY);
        }
        else if(position > 47 && position < 56 && position % 2 ==0){
            iv.setBackgroundColor(Color.DKGRAY);
        }
        else if(position > 55 && position < 64 && position % 2 ==1){
            iv.setBackgroundColor(Color.DKGRAY);
        }
        else
            iv.setBackgroundColor(Color.GRAY);
    }
    iv.setImageResource(images[position]);
    return iv;
}

2 个答案:

答案 0 :(得分:1)

尝试使用these options中的一个来创建视图周围的边框。我会避免任何固定值,如45dp边距和485dp高度,因为它在其他屏幕尺寸上看起来肯定不正确。

另外,我建议您使用GridLayout而不是GridView。从技术上讲,它需要API级别14,但您可以使用支持库中的那个来支持旧版本的Android。这不会是一个微不足道的变化,因为您需要通过调用addView而不是覆盖getView方法来添加切片。

GridLayout更适合绘制具有固定数量的图块的网格,这些图块始终显示。 GridView是一个更复杂的小部件,它有很多内部逻辑可以懒惰地加载磁贴,你在这里肯定不需要。它也可以使布局更容易。

答案 1 :(得分:0)

在网格视图说明中添加此行:

android:layout_centerInParent="true"