日积月累:ListView的属性详解和探究

在我们的日常开发中,ListView是一个最常用的组件,所以我们非常有必要对它的属性进行全面的了解。现在就以一个简单的实例,对ListView的属性做一个简单的讲解。 

首先我们给出简单的布局文件,就一个简单的ListView列表 

<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对列表进行填充 

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中添加如下属性,并演示其效果 


1.android:stackFromBottom属性:在ListView和GridView中使用,使它们的内容从底部开始显示 

 布局文件修改如下 

 <ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:stackFromBottom="true" /> 

运行效果如下,列表在开始的时候,内容就从底部开始显示: 


2.android:transcriptMode属性:设置列表的transcriptMode模式,该模式指定列表添加新的选项的时候,是否自动滑动到底部,显示新的选项。 

    disabled:取消transcriptMode模式,默认的 

    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可以自己尝试一下 


新技术,新未来!欢迎大家关注 “1024工场”微信服务号 ,时刻关注我们的最新的技术讯息! (甭客气!尽情的扫描或者长按!)

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值