1

GridView のすべての行に背景画像を設定したいと考えています。私はこのコードを使用しました:

GridView gv = (GridView) findViewById(R.id.grid);

    ArrayAdapter<String> aa = new ArrayAdapter<String>(
            this,
            R.layout.row,
            items);

    gv.setAdapter(aa);
    gv.setOnItemClickListener(this);

main.xml: (ここで GridView のデザインを設定します)

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent" 

   >
<TextView
    android:id="@+id/selection"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
  android:textSize="14pt"
  android:textStyle="bold"


    />
<GridView
    android:id="@+id/grid"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:verticalSpacing="65px"
    android:horizontalSpacing="5px"
    android:numColumns="auto_fit"
    android:columnWidth="100px"
    android:stretchMode="columnWidth"
    android:gravity="center"
    android:fastScrollEnabled="true"
    />

row.xml: (グリッド ビュー デザインの行をここに設定します)

<LinearLayout
 xmlns:android = "http://schemas.android.com/apk/res/android"
 android:layout_width  = "fill_parent"
 android:layout_height = "wrap_content"
 android:orientation   = "horizontal" 
 android:background="@drawable/rowbg"
 >


<TextView
android:id = "@+id/label"
android:layout_width  = "wrap_content"
android:layout_height = "wrap_content"
android:textSize      = "40sp" />

プロジェクトを実行すると、強制的にプログラムが閉じられます。しかし、次のように 2 行目を変更すると、行の設計がなくてもうまく動作します。

ArrayAdapter<String> aa = new ArrayAdapter<String>(
            this,
            android.R.layout.simple_list_item_1,
            items);

コードのどの部分を変更する必要がありますか?

ありがとう


Eclipse でプログラムを実行すると、「アプリケーションは例外なく停止しました。もう一度やり直してください。」というダイアログが表示されます。LogCat では、次のメッセージが表示されます。

Galaxy S でもアプリケーションを実行しようとしましたが、同じエラーが表示されます。

4

2 に答える 2

2

ArrayAdapter を拡張するアダプター クラスを作成します。

このクラスの getView メソッドで、行のレイアウトをインフレートし、データを設定するテキストビューにアクセスします。

于 2012-06-20T09:53:36.017 に答える
1

良い解決策は、ここで説明するようにグリッドビューをサブクラス化することです。

http://erikw.eu/android-row-background-in-gridview/

以下に再現:

public class MyGridView extends GridView {

    private Bitmap background;

    public MyGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
        background = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
    }


   @Override
    protected void dispatchDraw(Canvas canvas) {
        int count = getChildCount();
        int top = count &gt; 0 ? getChildAt(0).getTop() : 0;
        int backgroundWidth = background.getWidth();
        int backgroundHeight = background.getHeight();
        int width = getWidth();
        int height = getHeight();

        for (int y = top; y &lt; height; y += backgroundHeight){
            for (int x = 0; x &lt; width; x += backgroundWidth){
                canvas.drawBitmap(background, x, y, null);
            }
        }

        super.dispatchDraw(canvas);
    }
}

利用方法

<your.package.name.MyGridView
    android:id="@+id/mygridview"
    <!-- other GridView configuration parameters -->
    />
于 2013-03-20T15:12:35.200 に答える