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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM