【问题标题】:GridView row background image in AndroidAndroid中的GridView行背景图像
【发布时间】:2013-05-29 04:47:31
【问题描述】:

我想为 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 上运行应用程序,但我看到了同样的错误。

【问题讨论】:

    标签: android gridview background row


    【解决方案1】:

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

    在该类的getView方法中,为row增加布局,访问需要设置数据的textview。

    【讨论】:

      【解决方案2】:

      一个好的解决方案是子类化 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 -->
          />
      

      【讨论】:

      • 请注意,不鼓励仅链接的答案,参考随着时间的推移往往会变得陈旧。考虑在此处添加独立的概要,并保留链接作为参考。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      • 2016-08-15
      • 1970-01-01
      • 2023-04-03
      • 2013-02-11
      • 2011-04-20
      相关资源
      最近更新 更多