我想将背景图像设置为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上运行应用程序,我也看到同样的错误。
答案 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 > 0 ? getChildAt(0).getTop() : 0;
int backgroundWidth = background.getWidth();
int backgroundHeight = background.getHeight();
int width = getWidth();
int height = getHeight();
for (int y = top; y < height; y += backgroundHeight){
for (int x = 0; x < width; x += backgroundWidth){
canvas.drawBitmap(background, x, y, null);
}
}
super.dispatchDraw(canvas);
}
}
使用
<your.package.name.MyGridView
android:id="@+id/mygridview"
<!-- other GridView configuration parameters -->
/>