0

私はこれに何時間も費やし、解決策なしで見つけることができるすべての関連する SO の質問を調べました。

これが私の問題です:

画像のグリッドビューがあります。3 つの列が必要です (iOS のバージョンと美学に合わせるため)。numColumns を 3 に設定すると、各行の画像行の上部と下部の間に多くの余分なスペースができます。幅を自動調整に設定すると、常に 2 になります。見栄えは良くなりますが、3 列の方が望ましいでしょう。

私は何が欠けていますか?

レイアウト:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="top" >

<LinearLayout 
    android:id="@+id/llayout"       
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    >
    <ImageView
        android:id="@+id/header"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#666666"
        android:clickable="false"
        android:contentDescription="@string/title_card_collection"
        android:src="@drawable/sportscard2x" />
</LinearLayout>

<GridView
    android:id="@+id/cardGrid"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_above="@+id/llayout"
    android:gravity="center"
    android:horizontalSpacing="2dip"
    android:numColumns="3"
    android:stretchMode="columnWidth"
    android:layout_alignParentBottom="true"
    android:verticalSpacing="2dip" >
</GridView>

スクリーンショット

私が見逃しているのは簡単なことだと思っています。前もって感謝します。

更新: スクリーンショットを追加しました。問題は、1 行しか表示されていないことです。下にスクロールすると、他の 3 行が表示されますが、間に大きなスペースがあります。

4

1 に答える 1

3

<編集>

下記の「ヒント3」をご覧ください。コードの例はここにあります。

</編集>

問題は、のをに設定することだと思いlayout_heightます。グリッドビューでは、ラップされた高さの合計を適切に計算できないようです。したがって、1行のみが表示されています。<GridView>wrap_content

layout_heightmatch_parent(または他の固定の高さなど)を設定するか120dp、Javaオブジェクトを拡張GridViewして独自の計算を行うことができます(XMLレイアウトでカスタムグリッドビューオブジェクトを次のように使用する必要があります)。まあ:) <com.package.to.MyCustomGridView>

ただし、API 11より前のJavaコードでは、グリッドビューから列数を取得するための明確な方法がないことを強調する必要があります(データの行数を計算するためにこれが必要になります)アダプターが生成します)。はgetNumColumnsAPI11で導入されました。行間の間隔を見つける適切な方法もありません(getHorizontalSpacing()およびgetVerticalSpacing()メソッドはAPI 16で導入されました)。

参考までに:http://developer.android.com/reference/android/widget/GridView.html

ヒント1: 私はこれを自分でテストしていませんが、次のようなことを試すことができます。

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        ...
        />

    <GridView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1.0"
        ...
        />

</LinearLayout>

つまり、グリッドビューを線形レイアウトに含め、画像ビューがレイアウトされた後に使用可能なすべてのスペースをグリッドビューに追加します。

ヒント2: 独自のリストビューを作成できます。それにもかかわらず、Sony Mobileチュートリアルサイトには良いキャンディーがあるようです(そして、いいえ、私はSonyMobileに雇用されていません:-)。良いチュートリアルは良いチュートリアルです):http ://developer.sonymobile.com/2010/05/20/android-tutorial-making-your-own-3d-list-part-1/

ヒント3:以下の例のように 、JavaGridViewオブジェクトを拡張し、メソッドをオーバーライドできますonMeasureGridViewAndroidレイアウトXMLファイルで拡張クラスを参照することを忘れないでください(のように<com.package.MyGridView android:layout_width="match_parent" android:layout_height="wrap_content" ... />

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int heightSpec;

    // The great Android "hackatlon" (in order to enable "wrap_content" on grid views).
    if (getLayoutParams().height == LayoutParams.WRAP_CONTENT) {
        heightSpec = MeasureSpec.makeMeasureSpec(
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
    }
    else {
        heightSpec = heightMeasureSpec;
    }

    super.onMeasure(widthMeasureSpec, heightSpec);
}

うまくいけば、これでいくつかのインスピレーションを見つけるでしょう:-)

乾杯、-dbm

于 2012-10-01T12:05:38.783 に答える