0

我正在编写我的第一个 android 应用程序。我正在使用 android 2.3.3 SDK。该游戏是一种纸牌游戏,屏幕上有一个 4x4 的纸牌网格。

当游戏开始时,屏幕上唯一可见的是数据网格(没有菜单或什么都没有)。

所以 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,这样我就知道图像可以采用的最大高度和宽度。

  • 出于某种原因,我需要添加一个底部填充。我在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 个居中并垂直分布的图像(这适合所有屏幕,因此下面可能会有更多)。

截屏 .

我错过了什么?:)

谢谢!

克菲尔

4

1 回答 1

1

有没有办法将数据网格配置为在所有屏幕上可见,并在不配置图像宽度或高度的情况下显示所有不滚动的项目?为什么我需要为这么简单的任务如此努力?

这是一个简单的任务,只是您使用了错误的小部件。GridView如果单元格的网格比屏幕大,您通常会使用 a ,这样您就可以从GridView的回收机制中受益(以提高性能并且不会遇到应用程序的内存问题)。这不是您的情况,因为您希望所有单元格都可见。

我会使用一个TableLayout宽度和高度设置为FILL_PARENTstretchColumns设置为,*因此行列将具有相同的宽度),它将包含四个TableRowslayout_weight设置为1(并weighSum设置4为父级TableLayout),因此它们将具有相同的高度),还有layout_height因为TableRow将被设置为0dp。每个TableRow将包含四个ImageViews.

如果我确实需要自己计算东西,有没有办法获得实际的活动高度和宽度,所以我不需要添加任何填充?帮助我希望它适用于横向和纵向的所有屏幕尺寸。

我建议您使用我在上面发布的解决方案。如果您仍然想使用then使其GridView填充所有宽度/高度(通过 使用而fill_parent不是wrap_content像您对.layout_width/heightonCreateHandlerpostRunnableGridViewLayoutParams

于 2012-08-12T09:40:38.877 回答