如何设置listview的背景?

时间:2011-08-20 09:34:14

标签: android listview

我的一项活动中有一个ListView。我有一个自定义视图,其中包含ImageView。我想将此自定义视图添加为listview的背景。由于我们有两个函数setBackGroundDrawable(Drawable d)setBackGroundResource(resource)。我不能使用其中任何一个?

谁知道我怎么能这样做?我搜索但无法得到任何解决方案。

2 个答案:

答案 0 :(得分:1)

编辑:当我收到教程

当您想要动态绘制一些二维图形时,ShapeDrawable对象可能会满足您的需求。使用ShapeDrawable,您可以以编程方式绘制原始形状,并以任何可想象的方式设置样式。

ShapeDrawable是Drawable的扩展名,因此您可以使用预期可以使用Drawable的扩展名 - 可能用于视图的背景,使用setBackgroundDrawable()进行设置。当然,您也可以将自己的形状绘制为自己的自定义视图,然后将其添加到您的布局中。因为ShapeDrawable有自己的draw()方法,所以可以创建一个View的子类,在View.onDraw()方法中绘制ShapeDrawable。以下是View类的基本扩展,它将ShapeDrawable绘制为视图:

public class CustomDrawableView extends View {
    private ShapeDrawable mDrawable;

    public CustomDrawableView(Context context) {
        super(context);

        int x = 10;
        int y = 10;
        int width = 300;
        int height = 50;

        mDrawable = new ShapeDrawable(new OvalShape());
        mDrawable.getPaint().setColor(0xff74AC23);
        mDrawable.setBounds(x, y, x + width, y + height);
    }

    protected void onDraw(Canvas canvas) {
        mDrawable.draw(canvas);
    }
}

在构造函数中,ShapeDrawable定义为OvalShape。然后给它一个颜色,并设置形状的边界。如果不设置边界,则不会绘制形状,而如果不设置颜色,则默认为黑色。

定义自定义视图后,可以按照您喜欢的方式绘制。通过上面的示例,我们可以在Activity:

中以编程方式绘制形状
CustomDrawableView mCustomDrawableView;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mCustomDrawableView = new CustomDrawableView(this);

    setContentView(mCustomDrawableView);
}

如果您想从XML布局而不是从Activity中绘制此自定义drawable,则CustomDrawable类必须覆盖View(Context, AttributeSet)构造函数,该构造函数在通过XML通过膨胀实例化View时调用。然后将一个CustomDrawable元素添加到XML中,如下所示:

<com.example.shapedrawable.CustomDrawableView
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />

ShapeDrawable类(与android.graphics.drawable包中的许多其他Drawable类型一样)允许您使用公共方法定义drawable的各种属性。您可能想要调整的一些属性包括Alpha透明度,滤色器,抖动,不透明度和颜色。

您还可以使用XML定义基本可绘制形状。有关详细信息,请参阅Drawable Resources document

中有关Shape Drawables的部分

试一试:

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <com.example.shapedrawable.CustomDrawableView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
    <ListView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:cacheColorHint="#00000000"/>
</RelativeLayout>

并将自定义绘图设置为ImageView。

希望这会奏效。 :)

答案 1 :(得分:0)

您无法将自定义View用作ListView的背景。 但是,解决方法可能是:

  • 使用RelativeLayout作为父布局容器。
  • 为宽度和广告添加LinearLayout,其属性为fill_parent 高度
  • 将任何ID list_background提供给LinearLayout
  • 然后将ListView添加到父RelativeLayout
  • 将属性android:layout_centerInParent="true"添加到两个 ListViewLinearLayout
  • 如果有,请删除ListViewCustomRow的背景 任何
  • 现在使用Java获取LinearLayout并将View添加到其中 LinearLayout