在屏幕上传播DataGrid将显示其所有项目

时间:2012-08-12 07:30:29

标签: java android android-layout datagrid

我正在编写我的第一个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,这样我就知道图像可以采用的最大高度和宽度。

  • 由于某种原因我需要添加一个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. 如果我确实需要自己计算东西,有没有办法获得实际的活动高度和宽度,所以我不需要添加任何填充?我希望它可以在横向和纵向的所有碎片尺寸上工作。
  3. 我厌倦了改变并玩了很多天的配置,这是我迄今为止取得的最好成绩,因此我们将非常感谢有关该问题的任何信息。

    更新

    <?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 个答案:

答案 0 :(得分:1)

  

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

这是一个简单的任务,只是你使用了错误的小部件。如果单元格网格大于屏幕,您通常会使用GridView,这样您就可以从GridView的回收机制中受益(为了提高性能并且不会对应用程序造成麻烦)记忆)。这不是您的情况,因为您希望所有单元格都可见。

我会使用TableLayout,其宽度和高度设置为FILL_PARENTstretchColumns设置为*,因此行列将具有相同的宽度)四个TableRowslayout_weight设置为1(并且weighSum设置为4,用于父TableLayout),因此它们将具有相同的高度)此外,layout_height的{​​{1}}也会设置为TableRow。每个0dp将包含四个TableRow

  

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

我建议你使用我上面发布的解决方案。如果您仍想使用ImageViews,请填写所有宽度/高度(使用GridView而不是fill_parent,就像您对wrap_content所做的那样) layout_width/height方法使用onCreateHandlerpost,在其中检索Runnable的{​​{1}}并使用这些设置适配器