1page.title=版面配置
2page.tags=view,viewgroup
3@jd:body
4
5<div id="qv-wrapper">
6<div id="qv">
7  <h2>本文件內容</h2>
8<ol>
9  <li><a href="#write">編寫 XML</a></li>
10  <li><a href="#load">載入 XML 資源</a></li>
11  <li><a href="#attributes">屬性</a>
12    <ol>
13      <li><a href="#id">ID</a></li>
14      <li><a href="#layout-params">版面配置參數</a></li>
15    </ol>
16  </li>
17  <li><a href="#Position">版面配置位置</a></li>
18  <li><a href="#SizePaddingMargins">大小、邊距和邊界</a></li>
19  <li><a href="#CommonLayouts">常見版面配置</a></li>
20  <li><a href="#AdapterViews">使用配接器建置版面配置</a>
21    <ol>
22      <li><a href="#FillingTheLayout">將資料填入配接器檢視</a></li>
23      <li><a href="#HandlingUserSelections">處理點擊事件</a></li>
24    </ol>
25  </li>
26</ol>
27
28  <h2>重要類別</h2>
29  <ol>
30    <li>{@link android.view.View}</li>
31    <li>{@link android.view.ViewGroup}</li>
32    <li>{@link android.view.ViewGroup.LayoutParams}</li>
33  </ol>
34
35  <h2>另請參閱</h2>
36  <ol>
37    <li><a href="{@docRoot}training/basics/firstapp/building-ui.html">建置簡易使用者
38介面</a></li> </div>
39</div>
40
41<p>版面配置會定義使用者介面 (例如 <a href="{@docRoot}guide/components/activities.html">Activity</a> 或<a href="{@docRoot}guide/topics/appwidgets/index.html">應用程式小工具</a>的使用者介面) 的視覺結構。您可以兩種方式宣告版面配置:
42</p>
43<ul>
44<li><strong>在 XML 中宣告 UI 元素</strong>。Android 提供的 XML 字彙不僅簡單明瞭,還可對應至 View 類別和子類別 (例如小工具和版面配置)。
45</li>
46<li><strong>在執行階段啟動版面配置元素</strong>。您的應用程式可透過程式建立 View 和 ViewGroup 物件 (以及操控其屬性)。
47 </li>
48</ul>
49
50<p>Android 架構可讓您彈性使用上述任一或兩種方法來宣告及管理應用程式的 UI。例如,您可以在 XML 中宣告應用程式的預設版面配置,包括會顯示在應用程式中的元素及其屬性。接著,您可在執行階段為應用程式加入程式碼來修改螢幕物件的狀態,包括您在 XML 中宣告的物件。 </p>
51
52<div class="sidebox-wrapper">
53<div class="sidebox">
54  <ul>
55  <li><a href="{@docRoot}tools/sdk/eclipse-adt.html">Eclipse 專用的 ADT 外掛程式</a>可提供 XML 的版面配置預覽 &mdash; 只要開啟您想預覽的 XML 檔案,然後選取 [版面配置]<strong></strong> 標籤即可。
56
57</li>
58  <li>同時也建議您使用 <a href="{@docRoot}tools/debugging/debugging-ui.html#hierarchyViewer">階層檢視器</a>工具針對版面配置進行除錯 &mdash; 這項工具會顯示版面配置屬性值、繪製線框並在其中加上編距/邊界標記,以及提供完整檢視 (如果您是透過模擬器或裝置進行除錯的話)。
59
60
61
62</li>
63  <li><a href="{@docRoot}tools/debugging/debugging-ui.html#layoutopt">layoutopt</a> 工具可讓您快速分析版面配置和階層,以找出效能不佳等其他問題。
64</li>
65</div>
66</div>
67
68<p>在 XML 中宣告 UI 可讓您進一步將應用程式的顯示畫面與控制應用程式行為的程式碼區隔開來。這樣可將 UI 說明置於應用程式的程式碼外部,方便您修改或調整使用者介面說明,而不必修改並重新編譯原始碼。例如,您可以針對不同的螢幕方向、裝置螢幕大小和語言建立各種 XML 檔案。此外,在 XML 中宣告版面配置可協助以視覺效果呈現 UI 的結構,方便您進行除錯。針對上述優點,本文件著重於說明如何在 XML 中宣告版面配置。如果您想在執行階段啟動 View 物件,請參閱 {@link android.view.ViewGroup} 和 {@link android.view.View} 類別參考文件。
69
70</p>
71
72<p>一般來說,用於宣告 UI 元素的 XML 字彙會遵從類別與方法的結構和名稱,其中元素名稱對應至類別名稱,而屬性名稱則對應至方法。事實上,這些對應關係十分直接,您可以輕易猜出某個 XML 屬性對應的哪個類別方法,或某個類別對應的特定 XML 元素為何。不過請注意,並非所有字彙均為相同。在部分情況下,您會發現某些不同的名稱。例如,EditText 元素包含對應至 <code>EditText.setText()</code> 的 <code>text</code> 屬性。
73
74 </p>
75
76<p class="note"><strong>提示:</strong>如要進一步瞭解各種版面配置類型,請參閱<a href="{@docRoot}guide/topics/ui/layout-objects.html">常見版面配置物件</a>。
77您也可以參閱 <a href="{@docRoot}resources/tutorials/views/index.html">Hello Views</a> 教學指南,取得一系列說明如何建置各種版面配置的教學課程。
78</p>
79
80<h2 id="write">編寫 XML</h2>
81
82<p>您可以使用 Android 的 XML 字彙,快速設計 UI 版面配置和其中包含的螢幕元素,方法與採用 HTML 建立網頁相同 &mdash; 都需要建置一系列巢狀元素。 </p>
83
84<p>每個版面配置檔案均需包含 1 個根元素 (必須為 View 或 ViewGroup 物件)。定義根元素後,您就可以將額外的物件或小工具新增為子元素,逐步建置檢檢視階層視階層來定義您的版面配置。例如,以下是使用直向 {@link android.widget.LinearLayout} 以納入
85{@link android.widget.TextView} 和 {@link android.widget.Button} 的 XML 版面配置:</p>
86<pre>
87&lt;?xml version="1.0" encoding="utf-8"?>
88&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
89              android:layout_width="match_parent"
90              android:layout_height="match_parent"
91              android:orientation="vertical" >
92    &lt;TextView android:id="@+id/text"
93              android:layout_width="wrap_content"
94              android:layout_height="wrap_content"
95              android:text="Hello, I am a TextView" />
96    &lt;Button android:id="@+id/button"
97            android:layout_width="wrap_content"
98            android:layout_height="wrap_content"
99            android:text="Hello, I am a Button" />
100&lt;/LinearLayout>
101</pre>
102
103<p>在 XML 中宣告版面配置後,請使用 <code>.xml</code> 副檔名將檔案儲存到 Android 專案的 <code>res/layout/</code> 目錄中,藉此讓系統妥善加以編譯。
104 </p>
105
106<p>如要進一步瞭解 XML 版面配置檔案的語法,請參閱<a href="{@docRoot}guide/topics/resources/layout-resource.html">版面配置資源</a>。</p>
107
108<h2 id="load">載入 XML 資源</h2>
109
110<p>當您編譯應用程式時,系統會將所有 XML 版面配置檔案編入
111{@link android.view.View} 資源。在這種情況下,您必須透過 {@link android.app.Activity#onCreate(android.os.Bundle) Activity.onCreate()} 回呼,載入應用程式的程式碼中的版面配置資源,方法是呼叫 <code>{@link android.app.Activity#setContentView(int) setContentView()}</code>,然後採用以下格式將其參考資源傳送到版面配置資源:
112<code>R.layout.<em>layout_file_name</em></code>。例如,假設您將 XML 版面配置儲存成 <code>main_layout.xml</code>,您就必須針對如下所示的 Activity 載入該 XML:
113
114
115
116
117</p>
118<pre>
119public void onCreate(Bundle savedInstanceState) {
120    super.onCreate(savedInstanceState);
121    setContentView(R.layout.main_layout);
122}
123</pre>
124
125<p>Android 架構會在 Activity 啟動時呼叫 Activity 中的 <code>onCreate()</code> 回呼方法 (如需生命週期相關資訊,請參閱 <a href="{@docRoot}guide/components/activities.html#Lifecycle">Activity</a>)。
126
127
128</p>
129
130
131<h2 id="attributes">屬性</h2>
132
133<p>所有 View 和 ViewGroup 物件均支援本身專用的各種 XML 屬性。部分屬性僅適用於 View 物件 (例如 TextView 可支援 <code>textSize</code> 屬性),不過可能延伸這個類別的 View 物件也會沿用這些屬性。由於某些屬性是沿用自 View 根類別,因此會成為所有 View 物件的常用屬性 (例如 <code>id</code> 屬性)。
134
135
136
137而系統會將其他屬性視為「版面配置參數」,這些屬性可說明 View 物件的特定版面配置方向 (View 由物件的 ViewGroup 上層物件所定義)。
138
139</p>
140
141<h3 id="id">ID</h3>
142
143<p>任何 View 物件都可能包含一個相關聯的整數 ID,可用於識別樹狀結構中的 View。在應用程式編寫期間,雖然這個 ID 通常是在 XML 版面配置檔案的 <code>id</code> 屬性中指派為字串,系統仍會將其解讀為整數。此為所有 View 物件常用的 XML 屬性 (由 {@link android.view.View} 類別所定義);您會經常使用的這項屬性。以下是 XML 標記中的 ID 語法:
144
145
146
147
148</p>
149<pre>android:id="&#64;+id/my_button"</pre>
150
151<p>字串開頭的 @ 符號可指示 XML 剖析器應剖析或展開 ID 字串的其餘部分,並且將其視為 ID 資源。
152加號符號 (+) 表示此為系統必須建立並加到資源 (<code>R.java</code> 檔案) 中的新資源名稱。
153Android 架構提供了多種其他 ID 資源。
154參照 Android 資源 ID 時,您不必加入 + 符號,但必須加入 <code>android</code> 套件命名空間,如下所示:
155</p>
156<pre>android:id="&#64;android:id/empty"</pre>
157<p>只要加入 <code>android</code> 套件命名空間,系統就會從 <code>android.R</code> 資源類別參照 ID,而不是從本機資源類別。
158</p>
159
160<p>以下是透過應用程式建立檢視和參照的一般方法:</p>
161<ol>
162  <li>在版面配置檔案中定義檢視/小工具,並為該檔案指派不重複 ID:
163<pre>
164&lt;Button android:id="&#64;+id/my_button"
165        android:layout_width="wrap_content"
166        android:layout_height="wrap_content"
167        android:text="&#64;string/my_button_text"/>
168</pre>
169  </li>
170  <li>接著,建立檢視物件執行個體,並從版面配置中擷取該執行個體 (通常使用 <code>{@link android.app.Activity#onCreate(Bundle) onCreate()}</code> 方法進行擷取):
171
172<pre>
173Button myButton = (Button) findViewById(R.id.my_button);
174</pre>
175  </li>
176</ol>
177<p>請務必在建立 {@link android.widget.RelativeLayout} 時為檢視物件定義 ID。在相關的版面配置中,同層級的檢視可將本身的版面配置與其他同層級的檢視建立關聯,而不重複 ID 正是這些版面配置的參照依據。
178
179</p>
180<p>整個樹狀結構的 ID 不必是不重複 ID,但您所搜尋樹狀結構部分的 ID 就必須是不重複 ID (由於您搜尋的部分通常是整個樹狀結構,因此建議您為其定義不重複 ID)。
181
182</p>
183
184
185<h3 id="layout-params">版面配置參數</h3>
186
187<p>名為 <code>layout_<em>something</em></code> 的 XML 版面配置屬性會為適用於所屬 ViewGroup 的 View 定義版面配置參數。
188</p>
189
190<p>所有 ViewGroup 類別都會實作可延伸 {@link
191android.view.ViewGroup.LayoutParams} 的巢狀類別。這個子類別包含定義下層檢視大小和位置的屬性類型,而這些屬性類型也適用於檢視群組。
192
193如圖 1 所示,上層檢視群組為每個下層檢視 (包括下層檢視群組) 定義了版面配置參數。
194</p>
195
196<img src="{@docRoot}images/layoutparams.png" alt="" />
197<p class="img-caption"><strong>圖 1.</strong>檢視層級以及與每個檢視相關聯的版面配置參數。
198</p>
199
200<p>請注意,所有 LayoutParams 子類別都包含用於設定值的專屬語法。
201而每個子元素都必須定義適用於其上層元素的 LayoutParams,即便子元素也會為其下層物件定義不同的 LayoutParams。
202 </p>
203
204<p>所有檢視群組均包含寬度和高度 (<code>layout_width</code> 和
205<code>layout_height</code>),而每個檢視都必須定義這些值。大多數 LayoutParams 還會包含選用的標界和邊框。
206 <p>
207
208<p>您可以依據測量結果指定寬度和高度 (您通常不必經常指定這些值)。
209在大多數情況下,您需使用以下任一常數設定寬度或高度:
210 </p>
211
212<ul>
213  <li><var>wrap_content</var> 可指示檢視自行將大小調整成其內容所需的尺寸。
214</li>
215  <li><var>match_parent</var> (在 API 級別 8 之前稱為 <var>fill_parent</var> ) 可指示檢視自行將大小擴展成上層檢視群組允許的上限。
216</li>
217</ul>
218
219<p>一般來說,我們不建議您使用絕對單位 (例如像素) 指定版面配置的寬度和高度。
220建議做法是使用相對測量單位 (例如依據密度的像素單位 (
221<var>dp</var>)、 <var>wrap_content</var>或
222<var>match_parent</var>指定這些值,這是因為這樣可協助確保應用程式在各種裝置螢幕大小中能保有最佳顯示效果。如需支援的測量類型的定義,請參閱<a href="{@docRoot}guide/topics/resources/available-resources.html#dimension">可用資源</a>。
223
224
225
226</p>
227
228
229<h2 id="Position">版面配置位置</h2>
230   <p>
231   檢視的形狀為矩形。檢視包含一個位置值 (以一組「水平」<em></em>和「垂直」<em></em>座標表示),以及兩個尺寸值 (以寬度和高度表示)。
232
233位置和尺寸的單位均為像素。
234
235   </p>
236
237   <p>
238   您可以呼叫 {@link android.view.View#getLeft()} 和 {@link android.view.View#getTop()} 方法來擷取檢視的位置值。
239第一個方法會傳回顯示檢視的矩形區塊的水平座標 (X 座標);
240第二個方法則會傳回顯示檢視的矩形區塊的垂直座標 (Y 座標)。
241這兩個方法都會傳回檢視相對於其上層項目的位置。
242例如,假設 <code>getLeft()</code> 傳回 20,表示該檢視位於其直屬上層項目左側邊緣向右平移 20 像素的位置。
243
244
245   </p>
246
247   <p>
248   我們也提供了 {@link android.view.View#getRight()} 和 {@link android.view.View#getBottom()} 這兩個簡易方法,可用於避免不必要的運算程序。
249
250   這些方法會傳回險是檢視的矩形區塊的右下角座標。
251例如,呼叫 {@link android.view.View#getRight()} 的用途與以下運算式類似:<code>getLeft() + getWidth()</code>。
252
253   </p>
254
255
256<h2 id="SizePaddingMargins">大小、邊距和邊界</h2>
257   <p>
258   檢視的大小是以寬度和高度表示。單一檢視會包含兩組寬度和高度值。
259
260   </p>
261
262   <p>
263   第一組值稱為「寬度測定值」<em></em>和「高度測定值」<em></em>,
264可定義檢視在上層項目中的尺寸。
265您可以呼叫 {@link android.view.View#getMeasuredWidth()} 和 {@link android.view.View#getMeasuredHeight()} 來取得尺寸測定值。
266
267
268   </p>
269
270   <p>
271   第二組值簡稱「寬度」<em></em>和「高度」<em></em>,或是「寬度描繪值」<em></em>和「高度描繪值」<em></em>,
272可定義檢視在螢幕中的實際大小 (描繪期間以及版面配置之後)。
273
274這些值可能 (但未必) 會與寬度和高度測量值不同。
275您可以呼叫
276{@link android.view.View#getWidth()} 和 {@link android.view.View#getHeight()} 來取得尺寸描繪值。
277   </p>
278
279   <p>
280   測量檢視的尺寸時,系統會將檢視的邊距納入考量。邊距是指檢視的上、下、左、右部分 (單位為像素),
281
282   可用於將檢視內容偏移特定像素。
283例如,2 像素的左側邊距可將檢視內容由左側邊緣向右平移 2 像素。
284您可以使用
285{@link android.view.View#setPadding(int, int, int, int)} 方法來設定邊距,以及呼叫
286{@link android.view.View#getPaddingLeft()}、{@link android.view.View#getPaddingTop()}、
287{@link android.view.View#getPaddingRight()} 和 {@link android.view.View#getPaddingBottom()} 來查詢邊距。
288   </p>
289
290   <p>
291   雖然檢視可定義邊距,但無法針對邊界提供任何支援。
292不過,檢視群組可提供這類支援。詳情請參閱
293{@link android.view.ViewGroup} 和
294{@link android.view.ViewGroup.MarginLayoutParams}。
295   </p>
296
297   <p>如要進一步瞭解尺寸,請參閱<a href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">尺寸值</a>。
298
299   </p>
300
301
302
303
304
305
306<style type="text/css">
307div.layout {
308  float:left;
309  width:200px;
310  margin:0 0 20px 20px;
311}
312div.layout.first {
313  margin-left:0;
314  clear:left;
315}
316</style>
317
318
319
320
321<h2 id="CommonLayouts">常見版面配置</h2>
322
323<p>{@link android.view.ViewGroup} 類別的所有子類別均可以獨有方式顯示您在當中套疊的檢視。
324以下提供幾個 Android 平台內建的常見版面配置類型。
325</p>
326
327<p class="note"><strong>注意:</strong>雖然您可以將版面配置套疊在一起來符合您的 UI 設計,但建議您盡可能讓版面配置階層維持淺薄。
328
329套疊的版面配置越少,版面配置的描繪速度就越快 (建議您使用寬的檢視階層,而不是深的檢視階層)。
330</p>
331
332<!--
333<h2 id="framelayout">FrameLayout</h2>
334<p>{@link android.widget.FrameLayout FrameLayout} is the simplest type of layout
335object. It's basically a blank space on your screen that you can
336later fill with a single object &mdash; for example, a picture that you'll swap in and out.
337All child elements of the FrameLayout are pinned to the top left corner of the screen; you cannot
338specify a different location for a child view. Subsequent child views will simply be drawn over
339previous ones,
340partially or totally obscuring them (unless the newer object is transparent).
341</p>
342-->
343
344
345<div class="layout first">
346  <h4><a href="layout/linear.html">線性版面配置</a></h4>
347  <a href="layout/linear.html"><img src="{@docRoot}images/ui/linearlayout-small.png" alt="" /></a>
348  <p>這種版面配置可將其下層物件整合至單一水平或垂直列。如果視窗長度超過螢幕長度,線性版面配置就會建立捲軸方便使用者捲動畫面。
349</p>
350</div>
351
352<div class="layout">
353  <h4><a href="layout/relative.html">相對版面配置</a></h4>
354  <a href="layout/relative.html"><img src="{@docRoot}images/ui/relativelayout-small.png" alt="" /></a>
355  <p>這種版面配置可讓您指定下層物件之間的相對位置 (指定下層物件 A 位於下層物件 B 的左側),或指定下層物件與上層物件的相對位置 (指定下層物件緊貼上層物件的頂端)。
356</p>
357</div>
358
359<div class="layout">
360  <h4><a href="{@docRoot}guide/webapps/webview.html">網頁檢視</a></h4>
361  <a href="{@docRoot}guide/webapps/webview.html"><img src="{@docRoot}images/ui/webview-small.png" alt="" /></a>
362  <p>這種版面配置可顯示網頁。</p>
363</div>
364
365
366
367
368<h2 id="AdapterViews" style="clear:left">使用配接器建置版面配置</h2>
369
370<p>如果您版面配置的內容為動態內容,而不是預先定義的內容,您可以在執行階段將子類別為 {@link android.widget.AdapterView} 的版面配置填入檢視中。
371
372{@link android.widget.AdapterView} 類別的子類別會使用 {@link android.widget.Adapter} 將資料繫結至本身的版面配置。
373{@link android.widget.Adapter} 就如同是資料來源與 {@link android.widget.AdapterView} 版面配置的中間人 &mdash; {@link android.widget.Adapter} 會從陣列或資料庫查詢等來源擷取資料,然後將這些資料轉換成可加入 {@link android.widget.AdapterView} 版面配置的檢視。
374
375
376</p>
377
378<p>以下是配接器支援的常見版面配置:</p>
379
380<div class="layout first">
381  <h4><a href="layout/listview.html">清單檢視</a></h4>
382  <a href="layout/listview.html"><img src="{@docRoot}images/ui/listview-small.png" alt="" /></a>
383  <p>這種版面配置可顯示能夠捲動的單欄清單。</p>
384</div>
385
386<div class="layout">
387  <h4><a href="layout/gridview.html">格狀檢視</a></h4>
388  <a href="layout/gridview.html"><img src="{@docRoot}images/ui/gridview-small.png" alt="" /></a>
389  <p>這種版面配置可顯示能夠捲動的資料欄和資料列網格。</p>
390</div>
391
392
393
394<h3 id="FillingTheLayout" style="clear:left">將資料填入配接器檢視</h3>
395
396<p>您可將 {@link android.widget.AdapterView} 執行個體繫結至
397{@link android.widget.Adapter} 以便從外部來源擷取資料,並建立可顯示所有資料的 {@link
398android.view.View},藉此填入 {@link android.widget.AdapterView} (例如 {@link android.widget.ListView} 或 {@link android.widget.GridView}。
399</p>
400
401<p>Android 提供數個 {@link android.widget.Adapter} 子類別可用於擷取不同資料類型以及為 {@link android.widget.AdapterView} 建置檢視。
402以下是兩種常見的配接器:
403</p>
404
405<dl>
406  <dt>{@link android.widget.ArrayAdapter}</dt>
407    <dd>如果您的資料來源是陣列,請使用這個配接器。在預設情況下,{@link
408android.widget.ArrayAdapter} 會針對每個陣列項目呼叫 {@link
409java.lang.Object#toString()} 並取代 {@link
410android.widget.TextView} 中的內容,藉此為每個陣列項目建立檢視。
411      <p>例如,如果您想在 {@link
412android.widget.ListView} 中顯示一系列字串,請使用建構函式為每個字串和字串陣列指定版面配置,藉此初始化新的 {@link android.widget.ArrayAdapter}:
413</p>
414<pre>
415ArrayAdapter&lt;String> adapter = new ArrayAdapter&lt;String>(this,
416        android.R.layout.simple_list_item_1, myStringArray);
417</pre>
418<p>這個建構函式的引數包括:</p>
419<ul>
420  <li>您的應用程式 {@link android.content.Context}</li>
421  <li>含有陣列中所有字串的 {@link android.widget.TextView} 的版面配置</li>
422  <li>字串陣列</li>
423</ul>
424<p>接著,針對您的 {@link android.widget.ListView} 呼叫
425{@link android.widget.ListView#setAdapter setAdapter()}:</p>
426<pre>
427ListView listView = (ListView) findViewById(R.id.listview);
428listView.setAdapter(adapter);
429</pre>
430
431      <p>如要自訂每個項目的外觀,您可以針對陣列中的物件覆寫 {@link
432java.lang.Object#toString()} 方法。或者,如果想為 {@link android.widget.TextView} 以外的所有項目建立檢視 (例如,如果您想為所有陣列項目建立 {@link android.widget.ImageView}),請延伸 {@link
433android.widget.ArrayAdapter} 類別並覆寫 {@link android.widget.ArrayAdapter#getView
434getView()},以傳回您想為所有項目建立的檢視類型。
435
436</p>
437
438</dd>
439
440  <dt>{@link android.widget.SimpleCursorAdapter}</dt>
441    <dd>如果您的資料來自 {@link android.database.Cursor},請使用這個配接器。使用
442{@link android.widget.SimpleCursorAdapter} 時,您必須指定要用於 {@link android.database.Cursor} 中所有資料列的版面配置,以及指定要將 {@link android.database.Cursor} 中的哪些資料欄插入哪些版面配置檢視。
443
444例如,如果您想建立一份列出使用者名稱和電話號碼的清單,請執行查詢來傳回 {@link
445android.database.Cursor},其中包含一個列出每位使用者的資料列,以及多個列出名稱和電話號碼的資料欄。
446
447接著,請建立一個字串陣列以便從 {@link
448android.database.Cursor} 指定您想在版面配置中列出每項結果的資料欄,以及建立一個整數陣列為每個資料欄指定對應的值:
449</p>
450<pre>
451String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME,
452                        ContactsContract.CommonDataKinds.Phone.NUMBER};
453int[] toViews = {R.id.display_name, R.id.phone_number};
454</pre>
455<p>當您啟動 {@link android.widget.SimpleCursorAdapter} 時,請傳送用於顯示所有結果的版面配置、包含結果的 {@link android.database.Cursor},以及下列兩個陣列:
456</p>
457<pre>
458SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
459        R.layout.person_name_and_number, cursor, fromColumns, toViews, 0);
460ListView listView = getListView();
461listView.setAdapter(adapter);
462</pre>
463<p>{@link android.widget.SimpleCursorAdapter} 隨即會將每個 {@code
464fromColumns} 項目插入相對應的 {@code toViews} 檢視,藉此利用提供的版面配置為
465{@link android.database.Cursor} 中的所有資料列建立專屬檢視。</p>.</dd>
466</dl>
467
468
469<p>如果您在應用程式的效期內更改配接器讀取的底層資料,您就必須呼叫 {@link android.widget.ArrayAdapter#notifyDataSetChanged()}。
470這樣會通知附加的檢視由於資料已變更,因此需進行重新整理。
471</p>
472
473
474
475<h3 id="HandlingUserSelections">處理點擊事件</h3>
476
477<p>只要實作 {@link android.widget.AdapterView.OnItemClickListener} 介面,即可回應 {@link android.widget.AdapterView} 中所有項目的點擊事件。
478例如:</p>
479
480<pre>
481// Create a message handling object as an anonymous class.
482private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {
483    public void onItemClick(AdapterView parent, View v, int position, long id) {
484        // Do something in response to the click
485    }
486};
487
488listView.setOnItemClickListener(mMessageClickedHandler);
489</pre>
490
491
492
493