2013-05-02 80 views
0

我的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" /> 

ImageAdapter

而且我getView如果有帮助:

@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; 
} 
+0

的可能重复[简易的方法,使一个ImageView的是一个GridView完全匹配GridView的尺寸之下?](http://stackoverflow.com/questions/16339242/easy-way-to-make-an-imageview-这是在gridview下匹配的网格浏览) – Raghunandan 2013-05-02 16:36:29

回答

1

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

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

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

+0

好吧,我用了45dp,因为我无法让填充android的人在我的列之间添加消失,除了将android:horizo​​ntalSpacing设置为一个大的负数,这看起来同样糟糕。在摆弄之后,我忘记了删除了485dp的高度。 – ChrisWilson4 2013-05-02 17:10:06

+0

现在我必须去上班了,但我会尝试这些选项,或者将您带入GridLayout建议,即使我很懒。之后回来查看答案。 – ChrisWilson4 2013-05-02 17:12:24

+0

是的,我知道把它移动到'GridLayout'是一个相当大的工作量,但是我发现它更直观。在XML中,您只需指定'android:columnCount'。然后,您可以将'ImageView'图块作为子元素直接添加到XML中作为子元素添加到'GridLayout'中,或者通过调用类似'gridView.addView(iv,60,60);'的代码将它们添加到代码中。同样,如果您希望它在ICS之前的设备上工作,则需要使用支持库。 – oakes 2013-05-02 17:20:45

0

加入这一行中网格视图描述:

android:layout_centerInParent="true" 
+0

我曾尝试过,它只是整个GV在屏幕中间居中。背景颜色仍然只出现在右侧和底部,但仍未将内容居中? – ChrisWilson4 2013-05-02 16:44:12

+0

也许我应该把GridView放在其他东西里面,然后在其中加上一个bg颜色?你会知道如何把gridView放在其他容器中吗? – ChrisWilson4 2013-05-02 16:44:47