0

私は私の最初のAndroidアプリケーションを書いています。私はandroid2.3.3SDKを使用しています。このゲームは、画面上に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を追加する必要があります。ギャラクシーノートとギャラクシータブ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_PARENT行の列が同じ幅になるように設定された)を使用します。これには4つが含まれます(に設定された(そして親に対してに設定された)ため、同じ高さになります)。に設定されます。それぞれに4つ含まれます。stretchColumns*TableRowslayout_weight1weighSum4TableLayoutlayout_heightTableRow0dpTableRowImageViews

自分で計算する必要がある場合、実際のアクティビティの高さと幅を取得して、パディングを追加する必要がないようにする方法はありますか?横向きと縦向きのすべてのガラ場サイズで動作するように助けてください。

上記で投稿したソリューションを使用することをお勧めします。それでも使用したい場合は、GridViewすべての幅/高さを埋めるようにし(を使用して、の場合fill_parentとはwrap_content異なりますlayout_width/height)、onCreateメソッドでaを使用してHandler'を 取得し、それらを使用してアダプターをセットアップします。postRunnableGridViewLayoutParams

于 2012-08-12T09:40:38.877 に答える