<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip">
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="6dip"
android:src="@drawable/icon" />
<LinearLayout
android:orientation="vertical"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="fill_parent">
<TextView
android:id="@+id/toptext"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center_vertical"
android:textStyle="bold"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:id="@+id/bottomtext"
android:singleLine="false"
/>
</LinearLayout>
</LinearLayout>
这是我目前的行。如果我创建了一个.JPEG,我想要每个项目...我将如何更改此.xml文件?我会把图像放在哪里?在资产?
答案 0 :(得分:3)
如果您想为每个列表项设置单独的背景,则必须声明自己的自定义适配器。
从BaseAdapter派生出来,实现最重要的部分是getView(int, View, ViewGroup)
方法。
当您滚动列表时,您必须了解android如何重新使用现有的列表项视图元素。这意味着:在任何时刻,只会产生与在屏幕上同时看到的一样多的视图。
这种不会产生太多视图的最佳策略会导致您必须根据调用getView时所需的位置为每个列表项设置背景的问题。如果您只是在生成视图时尝试静态设置背景,它将再次重新出现,可能会附加到错误的元素。
getView
方法或者将“convertView”作为其第二个参数(null)。如果在将convertView设置为某个位置的情况下调用您的方法,则意味着:“立即将该视图用于所需的项目”。
这里使用的技术在API演示(部分列表)中有很好的描述,并且还有一个视频博客。
以下是如何做到的:
public class MyAdapter extends BaseAdapter {
public View getView(int position, View convertView, ViewGroup parent) {
// position is the element's id to use
// convertView is either null -> create a new view for this element!
// or not null -> re-use this given view for element!
// parent is the listview all the elements are in
if (convertView == null) {
convertView = mInflater.inflate(R.layout.your_layout, null);
// here you must do whatever is needed to populate the elements of your
// list element layout
...
} else {
// re-use the given convert view
// here you must set all the elements to the required values
}
// your drawable here for this element
convertView.setBackground( ... );
// maybe here's more to do with the view
return convertView;
}
}
基本上就是这样。如果只有一些背景图纸我也可能会缓存它们,所以你不必一遍又一遍地阅读资源!
玩得开心!
答案 1 :(得分:0)
您是否想要一个列表视图,其中每一行都有自己的背景,如下所示?
在您的代码中,您最有可能在视图上设置 ListAdapter 。您可以构造的许多适配器包含布局或视图参数。您只需要为您指向的视图设置 android:background 属性。
例如,我可能会像这样创建一个 ArrayAdapter :
new ArrayAdapter<String>(context, R.layout.item, R.id.itemName);
当然,我使用 ListView 的 setAdapter 与此适配器。在我的 item.xml 文件中,我可以像这样定义文本视图 itemName :
<TextView android:id="@+id/itemName" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Test view" android:background="@drawable/add"/>
但是,我不认为所有类型的 ListAdapter 都有一个具有该功能的构造函数。查看文档,了解您正在使用的 ListAdapter 的类型。如果您使用的是没有此构造函数的构造函数,我认为您可能需要对适配器进行子类化并覆盖适配器的 getView 以从XML文件中扩展您的视图。
我在每个 res / drawable 文件夹中都有图片add.png。