我正在编写我的第一个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,这样我就知道图像可以采用的最大高度和宽度。
你可以看到我为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;
}
所以有几个问题:
我厌倦了改变并玩了很多天的配置,这是我迄今为止取得的最好成绩,因此我们将非常感谢有关该问题的任何信息。
<?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
我错过了什么? :)
谢谢!
幼狮
答案 0 :(得分:1)
有没有办法将数据网格配置为在all上可见 屏幕并显示所有项目没有配置没有滚动 图像宽度或高度?为什么我需要这么努力工作呢 简单的任务?
这是一个简单的任务,只是你使用了错误的小部件。如果单元格网格大于屏幕,您通常会使用GridView
,这样您就可以从GridView
的回收机制中受益(为了提高性能并且不会对应用程序造成麻烦)记忆)。这不是您的情况,因为您希望所有单元格都可见。
我会使用TableLayout
,其宽度和高度设置为FILL_PARENT
(stretchColumns
设置为*
,因此行列将具有相同的宽度)四个TableRows
(layout_weight
设置为1
(并且weighSum
设置为4
,用于父TableLayout
),因此它们将具有相同的高度)此外,layout_height
的{{1}}也会设置为TableRow
。每个0dp
将包含四个TableRow
。
如果我确实需要自己计算东西,有没有办法获得 实际的活动高度和宽度所以我不需要添加任何填充? 帮助我希望它适用于横向和纵向的所有碎片尺寸。
我建议你使用我上面发布的解决方案。如果您仍想使用ImageViews
,请填写所有宽度/高度(使用GridView
而不是fill_parent
,就像您对wrap_content
所做的那样) layout_width/height
方法使用onCreate
到Handler
和post
,在其中检索Runnable
的{{1}}并使用这些设置适配器