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" />

当我运行项目时,它会强制关闭程序。但是当我如下更改第二行时,它运行良好,ofcorse 没有任何行设计:

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

我的代码的哪一部分应该改变?

谢谢


用 Eclipse 运行程序后,会出现一个对话框:“应用程序已异常停止。请重试。” 并在 LogCat 中出现此消息:“06-21 12:05:25.724: E/dalvikvm(305): Unable to open stack trace file '/data/anr/traces.txt': Permission denied”

我也尝试在 Galaxy S 上运行应用程序,我看到了同样的错误。

4

2 回答 2

2

创建一个扩展 ArrayAdapter 的适配器类。

在该类的 getView 方法中,为行扩展布局,访问应设置数据的文本视图。

于 2012-06-20T09:53:36.017 回答
1

一个好的解决方案是对 gridview 进行子类化,如下所述:

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 回答