在咱们的平常开发中,ListView是一个最经常使用的组件,因此咱们很是有必要对它的属性进行全面的了解。如今就以一个简单的实例,对ListView的属性作一个简单的讲解。 java
首先咱们给出简单的布局文件,就一个简单的ListView列表 : android
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFE1FF" android:orientation="vertical" > <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
Activity文件,使用ArrayAdapter对列表进行填充 : ide
public class MainActivity extends Activity { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); listView = (ListView) findViewById(R.id.listView1); final List<String> adapterData = new ArrayList<String>(); for (int i = 0; i < 20; i++) { adapterData.add("ListItem" + i); } ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, adapterData); listView.setAdapter(adapter); } }
运行效果以下 : 布局
接下来咱们在布局的ListView中添加以下属性,并演示其效果 。 post
1. android: stackFromBottom属性: 在ListView和GridView中使用,使它们的内容从底部开始显示 。 测试
布局文件修改以下 : this
<ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="match_parent" android:stackFromBottom="true" />
运行效果以下,列表在开始的时候,内容就从底部开始显示: spa
2.android: transcriptMode属性: 设置列表的 transcriptMode模式,该模式指定列表 添加新的选项的时候,是否自动滑动到底部,显示新的选项。 .net
disabled:取消transcriptMode模式,默认的 code
normal:当接受到数据集合改变的通知,而且仅仅当最后一个选项已经显示在屏幕的时候,自动滑动到底部 。
alwaysScroll:不管当前列表显示什么选项,列表将会自动滑动到底部显示最新的选项 。
布局修改以下 :
<ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="match_parent" android:stackFromBottom="true" android:transcriptMode="alwaysScroll" />
Activity文件代码以下 :
public class MainActivity extends Activity { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView1); final List<String> adapterData = new ArrayList<String>(); for (int i = 0; i < 20; i++) { adapterData.add("ListItem" + i); } final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, adapterData); listView.setAdapter(adapter); //定时给列表添加新的选项,并通知列表更新 final Handler handler = new Handler(); Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { adapterData.add("New ListItem"); handler.post(new Runnable() { @Override public void run() { adapter.notifyDataSetChanged(); } }); } }, 3000, 3000); }
运行结果以下 :
6秒后的结果(每当添加新的表项的时候,列表自动滑动的底部显示最新的表项)
其它两个normal和disable属性就不在演示,如上已经解释的比较清楚,你们能够本身试验感觉一下 。
3. android:cacheColorHint属性: 该属性在官方文档和个资料中找不到比较好的描述;根据实际的体验,当你设置的ListView的背景时,应该设置该属性为“#00000000”(透明), 否则在滑动的时候,列表的颜色会变黑或者背景图片小时的状况 !
4. android: divider属性: 列表之间绘制的颜色或者图片。通常开发中用于分隔表项 。
在实际开发过程当中,若是你不想要列表之间的分割线,能够设置属性为@null ,布局文件以下 :
<ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@null" />
运行结果以下 :
5.android: fadingEdge属性: 设置列表的阴影
布局文件以下 :
<ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/ic_launcher" android:cacheColorHint="#000000ff" android:fadingEdge="vertical" android:fadingEdgeLength="40dp"/>
运行效果以下 :
6. android:fastScrollEnabled属性: 启用快速滑动条,它能快速的滑动列表。 但在实际的测试中发现,当你的数据比较小的时候,是不会显示快速滚动条。
布局文件以下 :
<ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="match_parent" android:fastScrollEnabled="true" />
运行结果以下(当你快速滑动列表的时候,就出现以下快速滑动滚动条 ):
7.android : listSelector 属性: 用来指明列表当前选中的选项的图片
布局文件以下 :
<ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="match_parent" android:listSelector="@drawable/ic_launcher" />
运行结果以下(当用手指点击ListItem3的时候,出现以下效果,图片显示在ListItem3的底部,并未遮挡ListItem3):
8.android: drawSelectorOnTop属性: 当设置为true时候,listSelector的图片将会被绘制在被选中的选项之上 。
布局文件以下 :
<ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="match_parent" android:drawSelectorOnTop="true" android:listSelector="@drawable/ic_launcher" />
运行结果以下(对比上面,发现图片遮挡了ListItem3的显示):
9.android: choiceMode属性: 定义了列表的选择行为,默认的状况下,列表没有选择行为 。
none:正常不指定选择的列表
singleChoice:列表容许一个选择
multipleChoice:列表容许选择多个
mutipleChoiceModal :
布局文件以下 :
<ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="match_parent" android:choiceMode="multipleChoice" />
Activity文件以下 :
public class MainActivity extends Activity { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView1); final List<String> adapterData = new ArrayList<String>(); for (int i = 0; i < 40; i++) { adapterData.add("ListItem" + i); } //只有使用支持选择的布局才能选择多项 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, adapterData); listView.setAdapter(adapter); listView.setFastScrollEnabled(true); } }
运行结果以下(点击多个选项 ), 关于nono和singleChoice能够本身尝试一下 :