Android ListView 几个重要属性
来源:互联网 发布:网络拒绝接入什么意思 编辑:程序博客网 时间:2024/05/20 03:08
Android ListView 几个重要属性
Android ListView 几个重要属性
http://blog.csdn.net/avenleft/article/details/7334060
android:transcriptMode="alwaysScroll"
android:cacheColorHint="#00000000"
android:listSelector="@color/pink" listView item 选中时的颜色。默认为橙黄底色。
android:divider="#f9b68b" //分割线颜色
android:dividerHeight="1dp" //分割线边距
android:scrollbars="none" //不显示滚动条
android:fadingEdge="none" 去掉上边和下边黑色的阴影
// 设置Item之间无间隙
android:divider="#00000000" 或者在javaCode中如下定义:listView.setDividerHeight(0);
android:divider="@drawable/list_driver" 设置分割线的图片资源,如果则只要设置为
android:divider="@drawable/@null" 不想显示分割线
android:scrollbars="none" setVerticalScrollBarEnabled(true); 隐藏listView的滚动条
android:fadeScrollbars="true" 设置为true就可以实现滚动条的自动隐藏和显示
android:transcriptMode="alwaysScroll" 用ListView或者其它显示大量Items的控件实时跟踪或者查看信息,希望最新的条目可以自动滚动到可视范围内。通过设置的控件transcriptMode属性可以将Android平台的控件(支持ScrollBar)自动滑动到最底部。
android:fadingEdge="none" 去掉上边和下边黑色的阴影
android:fastScrollEnabled="false"
android:fastScrollEnabled = "true" 加快滑动速度
android:drawSelectorOnTop="false"
android:scrollingCache="false" ??????????????
android:drawSelectorOnTop="true" 点击某一条记录,颜色会显示在最上面,记录上的文字被遮住,所以点击文字不放,文字就看不到
android:drawSelectorOnTop="false" 点击某条记录不放,颜色会在记录的后面,成为背景色,但是记录内容的文字是可见的
首先是stackFromBottom属性,这只该属性之后你做好的列表就会显示你列表的最下面,值为true和false
android:stackFromBottom="true"
第二是transciptMode属性,需要用ListView或者其它显示大量Items的控件实时跟踪或者查看信息,并且希望最新的条目可以自动滚动到可视范围内。通过设置的控件transcriptMode属性可以将Android平台的控件(支持ScrollBar)自动滑动到最底部。
android:transcriptMode="alwaysScroll"
第三cacheColorHint属性,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备一张图片然后指定属性 android:background="@drawable/bg",不过不要高兴地太早,当你这么做以后,发现背景是变了,但是当你拖动,或者点击list空白位置的时候发现ListItem都变成黑色的了,破坏了整体效果。
如果你只是换背景的颜色的话,可以直接指定android:cacheColorHint为你所要的颜色,如果你是用图片做背景的话,那也只要将android:cacheColorHint指定为透明(#00000000)就可以了
第四divider属性,该属性作用是每一项之间需要设置一个图片做为间隔,或是去掉item之间的分割线
android:divider="@drawable/list_driver" 其中 @drawable/list_driver 是一个图片资源,如果不想显示分割线则只要设置为android:divider="@drawable/@null" 就可以了
第五fadingEdge属性,上边和下边有黑色的阴影
android:fadingEdge="none" 设置后没有阴影了~
第六scrollbars属性,作用是隐藏listView的滚动条,
android:scrollbars="none"与setVerticalScrollBarEnabled(true);的效果是一样的,不活动的时候隐藏,活动的时候也隐藏
第七fadeScrollbars属性,android:fadeScrollbars="true" 配置ListView布局的时候,设置这个属性为true就可以实现滚动条的自动隐藏和显示。
第八fastScrollEnabled属性 ,
很多开发者不知道ListView列表控件的快速滚动滑块是如何启用的,这里Android开发网告诉大家,辅助滚动滑块只需要一行代码就可以搞定,如果你使用XML布局只需要在ListView节点中加入 android:fastScrollEnabled="true" 这个属性即可,而对于Java代码可以通过myListView.setFastScrollEnabled(true); 来控制启用,参数false为隐藏。 还有一点就是当你的滚动内容较小,不到当前ListView的3个屏幕高度时则不会出现这个快速滚动滑块,同时该方法仍然是AbsListView的基础方法,可以在ListView或GridView等子类中使用快速滚动辅助。
第九drawSelectorOnTop属性
When set to true, the selector will be drawn over the selecteditem. Otherwise the selector is drawn behind the selected item. Thedefault value is false.
android:drawSelectorOnTop="true" 点击某一条记录,颜色会显示在最上面,记录上的文字被遮住,所以点击文字不放,文字就看不到
android:drawSelectorOnTop="false"点击某条记录不放,颜色会在记录的后面,成为背景色,但是记录内容的文字是可见的
choiceMode使用
首先看效果图:
这个是多选模式的
首先看Layout配置文件
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <Button
- android:id="@+id/addButton"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="增加一个"
- />
- <!-- android:scrollbarFadeDuration 一直显示滚动条 android:fastScrollEnabled 显示拖动块-->
- <ListView
- android:id="@id/android:list"
- android:layout_width="fill_parent"
- android:divider="#ee31ff5e"
- android:dividerHeight="1dp"
- android:choiceMode="multipleChoice"
- android:layout_height="fill_parent"
- android:fastScrollEnabled="true"
- android:focusable="true"
- android:scrollbarFadeDuration="0"/>
- </LinearLayout>
其中的android:choiceMode="multipleChoice"选项就是设置选择模式的,
他包括几个选择 CHOICE_MODE_MULTIPLE(多选),CHOICE_MODE_NONE(默认),CHOICE_MODE_SINGLE(单选)
这里还设置了divider
下面看代码
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Random;
- import android.app.ListActivity;
- import android.content.Context;
- import android.database.Cursor;
- import android.os.Bundle;
- import android.view.Gravity;
- import android.view.LayoutInflater;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.View.OnTouchListener;
- import android.widget.AdapterView;
- import android.widget.ArrayAdapter;
- import android.widget.BaseAdapter;
- import android.widget.Button;
- import android.widget.ListView;
- import android.widget.TextView;
- import android.widget.Toast;
- import android.widget.AdapterView.OnItemClickListener;
- public class ListViewDemo2 extends ListActivity{
- private Cursor cursor;
- private Button button;
- private TextView textViewFooter;
- private TextView textViewHeader;
- private ArrayAdapter<String> adapter ;
- private int counter = 10;
- private List<String> list = new ArrayList<String>();
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- list.add("aa");
- list.add("bb");
- list.add("cc");
- list.add("dd");
- list.add("ee");
- list.add("ff");
- list.add("gg");
- list.add("hh");
- list.add("ii");
- list.add("jj");
- list.add("kk");
- list.add("ll");
- list.add("mm");
- list.add("nn");
- super.onCreate(savedInstanceState);
- setContentView(R.layout.listviewdemo2);
- final ListView listView= (ListView) findViewById(android.R.id.list);
- textViewHeader = new TextView(this);
- textViewHeader.setGravity(Gravity.CENTER);
- textViewHeader.setTextSize(17);
- textViewFooter = new TextView(this);
- textViewFooter.setGravity(Gravity.CENTER);
- textViewFooter.setText("点击查看更多");
- textViewFooter.setTextSize(18);
- textViewHeader.setText("全部信息("+list.size()+")");
- listView.addHeaderView(textViewHeader);
- listView.addFooterView(textViewFooter);
- adapter = new ArrayAdapter<String>(ListViewDemo2.this,android.R.layout.simple_list_item_multiple_choice,list);
- listView.setOnItemClickListener(new OnItemClickListener(){
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id) {
- String strtemp = "";
- for(long ids :listView.getCheckItemIds()){
- strtemp += ids+":";
- }
- Toast.makeText(ListViewDemo2.this, ""+strtemp, Toast.LENGTH_LONG).show();
- }});
- setListAdapter(adapter);
- listView.setOnTouchListener(new OnTouchListener(){
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- switch (event.getAction()) {
- case MotionEvent.ACTION_DOWN:
- //获得当前点击位置的item序号
- int itemnum = listView.pointToPosition((int)event.getX(), (int)event.getY());
- //获得当前点击位置的RowId,为-1的除外
- long temp = listView.pointToRowId((int)event.getX(), (int)event.getY());
- Toast.makeText(ListViewDemo2.this, ""+itemnum+":"+temp, Toast.LENGTH_LONG).show();
- break;
- default:
- break;
- }
- return false;
- }});
- button = (Button) findViewById(R.id.addButton);
- button.setOnClickListener(new View.OnClickListener(){
- @Override
- public void onClick(View v) {
- Random random = new Random();
- int position = random.nextInt(list.size());
- list.add(position, ""+counter++);
- adapter.notifyDataSetInvalidated();
- textViewHeader.setText("全部信息("+list.size()+")");
- }
- });
- }
- }
通过android已定义的ArrayAdapter来显示数据,效果如图,
里面添加了三个事件:
1、OnTouchListener 这里通过触摸点来定位这个list的position信息,包括两个方法 pointToPosition和pointToRowId,注意这两个方法的不同点,就是在状态为-1的数据是否计算的区别
2、OnItemClickListener 这里获得当前选择的条目 通过方法getCheckItemIds来获得
3、Button的点击,这里动态增加一条数据项,可以发现通过getCheckItemIds来标记的选择项是通过位置来记录的,跟选择选项的内容无关,所以这里如果数据是动态的就要需要注意
还有一个问题,刚开始我
new ArrayAdapter<String>(ListViewDemo2.this,android.R.layout.simple_list_item_multiple_choice,list);
这里构造方法传入的是一个数组, 这样就发现了一个问题:
在我点击button当然是数组数据增加一条,但是发现list中的数据没有变化,
这个是为什么呢,难道是传入的集合跟ArrayAdapter中的集合不是同一个引用,那又发现了ArrayAdapter中有add和insert方法,但用了之后发现有java.lang.UnsupportedOperationException这个异常,android居然还没实现,真是奇怪啊,
后来详细看了下ArrayAdapter这个类的构造方法,原来传入list跟数据操作不同,如果是list直接用该引用,如果传入数组,就会通过Arrays.asList()来创造一个新List 这个区别就太大了, 后来只能把数组改成List 真是郁闷啊
这里使用的是ArrayAdapter ,那很多时候我们需要自定义Adater的,可能会处于数据处理,效率优化的考虑,
如果自定义Adapter如下
- class MyAdapter extends BaseAdapter{
- @Override
- public int getCount() {
- return list.size() ;
- }
- @Override
- public Object getItem(int position) {
- return list.get(position);
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- TextView tv = new TextView(ListViewDemo2.this);
- tv.setText(list.get(position));
- tv.setHeight(30);
- tv.setGravity(Gravity.CENTER);
- return tv;
- }
- }
这样定义显示的时候就会发现多选按钮框不见了,看ArrayAdapter的实现就会发现,他所用的 android.R.layout.simple_list_item_multiple_choice布局用的是CheckedTextView组件
- <?xml version="1.0" encoding="UTF-8"?>
- <CheckedTextView android:textAppearance="?textAppearanceLarge" android:gravity="center_vertical" android:id="@id/text1" android:paddingLeft="6.0dip" android:paddingRight="6.0dip" android:layout_width="fill_parent" android:layout_height="?listPreferredItemHeight" android:checkMark="?listChoiceIndicatorMultiple"
- xmlns:android="http://schemas.android.com/apk/res/android" />
所以这里如果用TextVew就不会显示选择提示框,其实这个组件就是TextView的子类
这里我们要用这个组件
- class MyAdapter extends BaseAdapter{
- @Override
- public int getCount() {
- return list.size() ;
- }
- @Override
- public Object getItem(int position) {
- return list.get(position);
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- LayoutInflater inflater = (LayoutInflater)getApplication().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- View view = inflater.inflate(android.R.layout.simple_list_item_multiple_choice, parent, false);
- TextView tv = (TextView)view;
- tv.setText(list.get(position));
- tv.setHeight(30);
- tv.setGravity(Gravity.CENTER);
- return tv;
- }
- }
这样就正确显示了
- android ListView 几个重要属性
- android ListView 几个重要属性
- android ListView 几个重要属性
- android ListView 几个重要属性
- Android ListView 几个重要属性
- android ListView 几个重要属性
- android ListView 几个重要属性
- android ListView 几个重要属性 .
- android ListView 几个重要属性
- android ListView 几个重要属性
- android ListView 几个重要属性
- android ListView 几个重要属性
- android ListView 几个重要属性
- Android ListView 几个重要属性
- android ListView 几个重要属性
- Android ListView 几个重要属性
- android ListView 几个重要属性
- android ListView 几个重要属性
- [Unity3d ]物体自动移动到指定点
- Java异常的概念
- Longest Valid Parentheses
- leetcode之Reverse Vowels of a String
- iOS面试
- Android ListView 几个重要属性
- win7下eclipse配置maven
- JSTL标签库之核心标签
- 关于:INSTALL_FAILED_DUPLICATE_PERMISSION perm=android.permission.BAIDU_LOCATION_SERVICE pkg=com.exampl
- java期中作业
- java枚举
- 内存分析
- 【初探】进程通信与线程同步
- java单例设计模式