当前位置: 首页 > news >正文

basic4android 开发教程翻译(八)使用ListView

ListView 控件是一个非常强大的控件. 它可以以非常雅致的方式来显示长的或者短的列表.

建立一个ListView 非常简单:

Code:
Sub Globals
 
Dim ListView1 As ListView
End Sub

Sub Activity_Create(FirstTime As Boolean)
    ListView1.Initialize(
"ListView1")
    
For i = 1 To 300
       ListView1.AddSingleLine(
"Item #" & i)
    
Next
    Activity.AddView(ListView1, 
00100%x100%y)
End Sub
Sub ListView1_ItemClick (Position As Int, Value As Object)
 Activity.Title = Value
End Sub



ListView既可以通过程序加入,也可以通过设计器加入. 在这里必须通过代码来添加.
代码说明:
- ListView1.Initialize("ListView1") - 在这里我们初始化一个列表,并将事件名的属性设置为ListView1.这意味着,为了捕获它的相应事件, 我们需要使用类似:ListView1_ItemClick 这样的子程.
- ListView1.AddSingleLine - 增加一个单行项目.
- Activity.AddView(ListView1, 0, 0, 100%x, 100%y) - 注意使用的百分比单位. 我们设置它的高和宽与activity的值一样.

当前有三种类型的项目: 单行, 两行和两行加位图.
每种类型都可以定制. 默认如下图:



这是相关代码:

Code:
Dim Bitmap1 As Bitmap
Bitmap1.Initialize(
File.DirAssets, "button.gif")
For i = 1 To 300
  ListView1.AddSingleLine(
"Item #" & i)
  ListView1.AddTwoLines(
"Item #" & i, "This is the second line.")
  ListView1.AddTwoLinesAndBitmap(
"Item #" & i, "This is the second line.", Bitmap1)
Next

我们可以给不同的项目设置不同的位图. 请注意这个代码载入一个叫button.gif的图形文件. 这个文件应该被加入到Files页面(在IDE的右面板). 你可以从本文的附件里面下载这个工程.

定制每种类型
这三种类型都可以被定制. 并会改变所有的这种类型.
ListView有三个"模式" 并被保存在下面:
- SingleLineLayout
- TwoLinesLayout
- TwoLinesAndBitmap

每一种模式都有一个ItemHeight属性,一个 Background 属性和更多的views属性. 再说一次,如果你改变这些属性的话,它会影响所有这种类型的项目.
Example of customizing the single line items:

Code:
ListView1.SingleLineLayout.ItemHeight = 100dip
ListView1.SingleLineLayout.Label.TextSize = 
20
ListView1.SingleLineLayout.Label.TextColor = 
Colors.Blue
ListView1.SingleLineLayout.Label.Gravity = 
Gravity.CENTER
  
For i = 1 To 300
    ListView1.AddSingleLine(
"Item #" & i)
    ListView1.AddTwoLines(
"Item #" & i, "This is the second line.")
    ListView1.AddTwoLinesAndBitmap(
"Item #" & i, "This is the second line.", Bitmap1)
 
Next

结果如图:


注意这里把ItemHeight设为100dip. 'dip'单位导致它会按照当前设备的比例自动缩放. 而对于TextSize来说会有一个误区,因为文本大小已经是通过比例单位计算的.

下面的代码与上面的功能相似(这个更清晰):

Code:
ListView1.SingleLineLayout.ItemHeight = 100dip
Dim?label1 As Label
label1 = ListView1.SingleLineLayout.Label 
'set the label to the model label.
label1.TextSize = 20
label1.TextColor = 
Colors.Blue
label1.Gravity = 
Gravity.CENTER

你可以采用类似的方法来改变其他类型的外观.
其他类型有另外的views: SecondLabel 和 ImageView.

返回值
首先应该注意,可能会没有选中的项目.这是因为同时使用手指滑动和滚轮或键盘滑动的组合造成其没有相关选项 .
你应该捕获ItemClick事件并处理点中的项目.
点中的项目的值会被作为参数传递进来.
现在,项目的值是什么呢?
默认的值是第一行保存的文本.
然而,你可以把它改变为任何你喜欢使用的对象:
AddSingleLine2, AddTwoLines2 和 AddTwoLinesAndBitmap2 三个方法接受一个另外附加的参数作为返回值.. 这个就可以让你的应用可以传递更多的信息.

背景优化
ListView有一个隐藏的假定的背景是纯黑.如果你设置背景为其它类型的话,例如过渡背景和图像 , 在滑动过程中会发现背景消失了.
你可以使用ScrollingBackgroundColor属性来改变背景的滑动颜色.如果背景不是纯色 的话,把它设置为Colors.Transparent.

示例 (activity的背景是过渡的):

Code:
Dim GD As GradientDrawable
GD.Initialize(
"TR_BL"Array As Int(Colors.Gray,Colors.LightGray))
Activity.Background = GD
ListView1.ScrollingBackgroundColor = 
Colors.Transparent

提示
如果你想单行项目带有位图(不想使用两行带位图),你可以设置第二个标签的visible属性为false .

如果有非常多的项目,你应该使用快速滚动器:

Code:
ListView1.FastScrollEnabled = true



在这里下载小范例: http://www.basic4ppc.com/android/fil...s/ListView.zip

相关文章:

  • 虚拟机安装Linux怎么使桌面铺满虚拟机
  • xml.exist() 实例演示
  • CentOS 5.5 使用 EPEL 和 RPMForge 软件库
  • IMSI 小记
  • 1.7亿次接力 百度知道成雷锋精神新载体
  • 知识管理(KM) 企业文化的最好“沉淀”
  • cacti监控squid
  • 在Red Hat 4 AS U7上安装oracle10gR2
  • ctrl+shift+c
  • EFCodeFirst系列
  • 深入理解JavaScript系列(4):立即调用的函数表达式
  • Box2dの学习资料整理与收集[不定时更新][Ispooky]
  • Cocos2d游戏开发之(一)多触点与触屏事件详解
  • HDU 1422 重温世界杯【最长非负连续子序列】
  • Python 中的bisect
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【node学习】协程
  • GitUp, 你不可错过的秀外慧中的git工具
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • JWT究竟是什么呢?
  • MYSQL 的 IF 函数
  • Octave 入门
  • php中curl和soap方式请求服务超时问题
  • React组件设计模式(一)
  • Ruby 2.x 源代码分析:扩展 概述
  • Vue实战(四)登录/注册页的实现
  • vue数据传递--我有特殊的实现技巧
  • vue学习系列(二)vue-cli
  • 从重复到重用
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 检测对象或数组
  • 讲清楚之javascript作用域
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 码农张的Bug人生 - 初来乍到
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 我有几个粽子,和一个故事
  • 异步
  • 怎么把视频里的音乐提取出来
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​插件化DPI在商用WIFI中的价值
  • #### go map 底层结构 ####
  • #13 yum、编译安装与sed命令的使用
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (转)http-server应用
  • (转)可以带来幸福的一本书
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .apk 成为历史!
  • .net 流——流的类型体系简单介绍