2012-08-12 27 views
0

我在寫我的第一個Android應用程序。我正在使用android 2.3.3 SDK。遊戲是一種卡片遊戲,在屏幕上有一個4x4網格的網格。散佈在屏幕上一個DataGrid都將它的項目可見

當遊戲開始在屏幕上看到的僅僅是數據網格(無菜單或沒有)。

所以GameActivity佈局如下:

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/faces_grid_view" 
    android:numColumns="4" 
    android:verticalSpacing="1dp" 
    android:horizontalSpacing="1dp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
> 
</GridView> 

這是GameActivity類的OnCreate函數的相關代碼:

  Display display = getWindowManager().getDefaultDisplay(); 
      final int width = display.getWidth(); 
      final int height = display.getHeight(); 

      final int bottomPadding=150; 
      //Display display = getWindowManager().getDefaultDisplay(); 
      gameTurns = new ArrayList<GameTurn>(); 
      imageWidth=width/4; 
      imageHeight=(height-bottomPadding)/4; 
      imageAdapter = new ImageAdapter(this,imageWidth,imageHeight); 
      facesGridView = (GridView) findViewById(R.id.faces_grid_view); 
      facesGridView.setAdapter(imageAdapter); 
在OnCreate

()的代碼我得到defaultDisplaySize,除以4,所以我會知道圖像可以採用的最大高度和寬度。

  • 由於某種原因,我需要添加一個bottomPadding。我在galaxy note和galaxy tab 10.1上檢查過它,也許getDefaultDisplay也會返回平板電腦本身底部工具欄的空間,所以圖片會在沒有任何填充的情況下覆蓋整個屏幕。

,你可以看到我設置爲GridView的適配器。該適配器擴展BaseAdapter ,我粘貼到他的構造函數的寬度和高度我以前計算。

適配器的getView功能包含以下內容:

 public View getView(int position, View convertView, ViewGroup parent) { 
      ImageView imageView; 
      if (convertView == null) { // if it's not recycled, initialize some attributes 
       imageView = new ImageView(mContext); 
       LayoutParams param = new LinearLayout.LayoutParams(this.imageWidth,this.imageHeight); 
       imageView.setLayoutParams(new GridView.LayoutParams(param)); 
       imageView.setAdjustViewBounds(true); 
       imageView.setScaleType(ScaleType.CENTER_INSIDE); 
       imageView.setPadding(1,1,1,1); 
      } else { 
       imageView = (ImageView) convertView; 
      } 

這樣幾個問題:

  1. 是有辦法只是爲了配置數據網格是所有的屏幕上顯示,顯示沒有配置圖像寬度或高度時沒有滾動的所有項目?爲什麼我需要爲這麼簡單的任務努力工作?
  2. 如果我需要計算的東西我自己,有沒有一種方式來獲得實際活動的高度和寬度,所以我不需要添加任何的填充? welp我希望它可以在橫向和縱向上使用所有的尺寸。

我厭倦了改變和玩了很多天的配置,這是迄今爲止我所取得的最好成績,所以關於這個問題的任何信息將不勝感激。

更新
<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:stretchColumns="*" 
    android:weightSum="4" > 

<TableRow 
    android:id="@+id/tableRow1" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    > 
<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView4" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 

</TableRow> 
<TableRow 
    android:id="@+id/tableRow2" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    > 
<ImageView 
    android:id="@+id/imageView5" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView6" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView7" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView8" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 

</TableRow> 
    <TableRow 
    android:id="@+id/tableRow3" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    > 
<ImageView 
    android:id="@+id/imageView9" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView10" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView11" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView12" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 

</TableRow> 
    <TableRow 
    android:id="@+id/tableRow4" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    > 
<ImageView 
    android:id="@+id/imageView13" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView14" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView15" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 
<ImageView 
    android:id="@+id/imageView16" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:contentDescription="@string/face" 
    android:onClick="onItemClick" 
    /> 

</TableRow> 

</TableLayout> 

此XML文件導致中心和垂直方向上擴展一個4幅圖像(這符合所有屏幕,以便可以有更多下文)。

screenshot http://i49.tinypic.com/qn3d6t.png

我錯過了什麼? :)

謝謝!

幼獅

回答

1

是有辦法只是爲了配置數據網格是所有 屏幕上可見,並顯示沒有滾動的所有項目沒有配置 圖像的寬度或高度?爲什麼我需要爲這樣一個簡單的任務努力工作?

這是一個簡單的任務,只是您使用的是錯誤的小部件。如果單元網格大於屏幕,那麼通常會使用GridView,這樣您就可以從GridView的回收機制中獲益(以提高性能並且不會讓應用程序的內存出現問題)。這不是你的情況,因爲你希望所有單元格都可見。

我會用一個TableLayout寬度和高度設置爲FILL_PARENT(與stretchColumns設置爲*所以排列將具有相同的寬度),這將包含四個TableRows(與layout_weight設置爲1(和weighSum設置爲4爲父母TableLayout),因此他們將擁有相同的身高),TableRowlayout_height也將設置爲0dp。每個TableRow將包含四個ImageViews

如果我需要計算的東西我自己,有沒有辦法讓 實際活動的高度和寬度,所以我不需要添加任何的填充? 幫助我希望它適用於橫向和縱向的所有尺寸的碎石。

我會建議你使用我上面發佈的解決方案。如果你仍然想使用GridView然後使它補全寬/高(通過使用fill_parent,而不是wrap_content像你這樣爲layout_width/height)和onCreate方法使用Handlerpost一個Runnable在其中檢索GridView' s LayoutParams並使用它們來設置適配器。

+0

看起來很神奇!現在就試試吧,讓你知道。謝謝 – ufk 2012-08-12 09:44:44

+0

謝謝。我仍然沒有得到預期的結果。我在這裏發佈了新的xml文件。到目前爲止感謝:) – ufk 2012-08-12 19:13:51

+0

ohh ..我還添加weightSum = 4到每個圖像的tableRow和layout_weight = 1。看起來像現在起作用。測試。 – ufk 2012-08-12 19:15:57

相關問題