Android中的GridView行背景图像

时间:2012-06-20 09:44:26

标签: android gridview background row

我想将背景图像设置为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" />

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

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):无法打开堆栈跟踪文件'/data/anr/traces.txt':权限被拒绝”

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

2 个答案:

答案 0 :(得分:2)

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

在此类的getView方法中,为行的布局充气,访问应将数据设置到的textview。

答案 1 :(得分: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 -->
    />