2013-05-02 77 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