blob: 6add812d89f7d5192356da81754c559c877d1e30 [file] [log] [blame]
page.title=B trí
page.tags=dng xem, nhóm dng xem
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2>Trong tài liu này</h2>
<ol>
<li><a href="#write">Ghi XML</a></li>
<li><a href="#load">Np Tài nguyên XML</a></li>
<li><a href="#attributes">Thuc tính</a>
<ol>
<li><a href="#id">ID</a></li>
<li><a href="#layout-params">Tham s B trí</a></li>
</ol>
</li>
<li><a href="#Position">V trí B trí</a></li>
<li><a href="#SizePaddingMargins">Kích cỡ, Phn đệm và Lề</a></li>
<li><a href="#CommonLayouts">Các B trí Thường gp</a></li>
<li><a href="#AdapterViews">Xây dng B trí bng mt Trình điu hp</a>
<ol>
<li><a href="#FillingTheLayout"in d liu vào mt dng xem trình điu hp</a></li>
<li><a href="#HandlingUserSelections">X lý s kin nhp</a></li>
</ol>
</li>
</ol>
<h2>Lp khóa</h2>
<ol>
<li>{@link android.view.View}</li>
<li>{@link android.view.ViewGroup}</li>
<li>{@link android.view.ViewGroup.LayoutParams}</li>
</ol>
<h2>Xem thêm</h2>
<ol>
<li><a href="{@docRoot}training/basics/firstapp/building-ui.html">Xây dng mt Giao din Người dùng
Đơn gin</a></li> </div>
</div>
<p>B trí định nghĩa cu trúc hin th cho mt giao din người dùng, chng hn như UI cho mt <a href="{@docRoot}guide/components/activities.html">hot động</a> hoặc <a href="{@docRoot}guide/topics/appwidgets/index.html">widget ứng dụng</a>.
Bạn có thể khai báo một bố trí bằng hai cách:</p>
<ul>
<li><strong>Khai báo phần tử UI trong XML</strong>. Android cung cấp một kho từ vựng XML
đơn giản, tương ứng với các lớp và lớp con Dạng xem, chẳng hạn như dành cho các widget và bố trí.</li>
<li><strong>Khởi tạo các phần tử bố trí vào thời gian chạy</strong>. Ứng dụng
của bạn có thể tạo các đối tượng Dạng xem và Nhóm Dạng xem (và thao tác trên các tính chất của nó) theo lập trình. </li>
</ul>
<p>Khuôn khổ Android cho bạn sự linh hoạt trong khi sử dụng một hoặc cả hai phương pháp này để khai báo và quản lý UI ứng dụng của mình. Ví dụ, bạn có thể khai báo các bố trí mặc định cho ứng dụng của mình trong XML, bao gồm các phần tử màn hình mà sẽ xuất hiện trong chúng hoặc tính chất của chúng. Sau đó, bạn có thể thêm mã trong ứng dụng của mình để sửa đổi trạng thái của các đối tượng trên màn hình, bao gồm những đối tượng được khai báo trong XML, vào thời gian chạy. </p>
<div class="sidebox-wrapper">
<div class="sidebox">
<ul>
<li>Phần bổ trợ <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT
cho Eclipse</a> sẽ đưa ra một bản xem trước bố trí XML của bạn &mdash;
có tệp XML được mở, hãy chọn tab <strong>Bố trí</strong>.</li>
<li>Bạn cũng nên thử công cụ
<a href="{@docRoot}tools/debugging/debugging-ui.html#hierarchyViewer">Trình xem Phân cấp</a>,
để g ri các b trí &mdash; nó hé l các giá tr tính cht ca b trí,
v đường vin bng các ch báo phn đệm/lề, và các dng xem được dng đầy đủ trong khi
bn g ri trên trình mô phng hoc thiết bị.</li>
<li>Công c <a href="{@docRoot}tools/debugging/debugging-ui.html#layoutopt">layoutopt</a> cho phép
bn nhanh chóng phân tích các b trí và phân cp ca mình xem có không hiu qu hoc có các vn đề khác không.</li>
</div>
</div>
<p>Ưu đim ca vic khai báo UI ca bn trong XML là cho phép bn tách vic trình bày ng dng ca mình vi mã điu khin hành vi ca nó hiu qu hơn. Mô t UI ca bn nm ngoài mã ng dng ca bn, điu này có nghĩa rng bn có th sa đổi hoc điu hp nó mà không phi sa đổi mã ngun ca bn và biên dch li. Ví dụ, bn có th to b trí XML cho các hướng màn hình khác nhau, kích c màn hình khác nhau, và ngôn ng khác nhau. Ngoài ra, vic khai báo b trí trong XML giúp d dàng hơn trong vic hin th cu trúc UI ca bn, vì vy s d g lỗi s c hơn. Như vy, tài liu này tp trung vào vic hướng dn bn cách khai báo b trí ca mình trong XML. Nếu bn
quan tâm ti vic khi to các đối tượng Dng xem vào thi gian chy, hãy tham kho {@link android.view.ViewGroup} và
tài liu tham kho lp {@link android.view.View}.</p>
<p>Nhìn chung, kho t vng ca XML đối vi vic khai báo các phn t UI tuân th cht ch cu trúc và cách đặt tên các lp và phương pháp, trong đó các tên phn t tương ng vi tên lp và tên thuc tính tương ng vi phương pháp. Trên thc tế, s tương ng thường trc tiếp đến mc bn có th đoán thuc tính XML nào tương ng vi mt phương pháp lp, hoc đoán xem lp nào tương ng vi mt phn t XML cho trước. Tuy nhiên, lưu ý rng không phi tt c t vng đều ging nhau. Trong mt s trường hp, có s khác bit nh trong vic đặt tên. Ví
dụ, phn t EditText có thuc tính <code>text</code> tương ng vi
<code>EditText.setText()</code>. </p>
<p class="note"><strong>Mo:</strong> Tìm hiểu thêm về các kiểu bố trí trong <a href="{@docRoot}guide/topics/ui/layout-objects.html">Đối tượng Bố trí
Thường gặp</a>. Có một tuyển tập các bài hướng dẫn về việc xây dựng các bố trí khác nhau trong hướng dẫn bài học
<a href="{@docRoot}resources/tutorials/views/index.html">Dạng xem Hello</a>.</p>
<h2 id="write">Ghi XML</h2>
<p>Khi sử dụng từ vựng XML của Android, bạn có thể nhanh chóng thiết kế các bố trí UI và phần tử màn hình mà chúng chứa, giống như cách bạn tạo trang web trong HTML &mdash; bằng một loạt các phần tử lồng nhau. </p>
<p>Mỗi tệp bố trí phải chứa chính xác một phần tử gốc, đó phải là một đối tượng Dạng xem hoặc Nhóm Dạng xem. Sau khi đã định nghĩa phần tử gốc, bạn có thể thêm các đối tượng hoặc widget bố trí bổ sung làm phần tử con để dần dần xây dựng một phân cấp Dạng xem định nghĩa bố trí của bạn. Ví dụ, sau đây là một bố trí XML sử dụng một {@link android.widget.LinearLayout}
thẳng đứng để giữ một {@link android.widget.TextView} và một {@link android.widget.Button}:</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?>
&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
&lt;TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
&lt;Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
&lt;/LinearLayout>
</pre>
<p>Sau khi bn đã khai báo b trí ca mình trong XML, hãy lưu tp vi phn m rng <code>.xml</code>,
trong thư mc d án <code>res/layout/</code> Android của bạn để biên dịch cho phù hợp. </p>
<p>Thông tin v cú pháp đối vi tp XML b trí có sn trong tài liu <a href="{@docRoot}guide/topics/resources/layout-resource.html">Tài nguyên B trí</a>.</p>
<h2 id="load">Np Tài nguyên XML</h2>
<p>Khi bn biên dch ng dng ca mình, tng tp b trí XML được biên dch thành mt tài nguyên
{@link android.view.View}. Bn nên np tài nguyên b trí t mã ng dng ca mình, trong trin khai gi li
{@link android.app.Activity#onCreate(android.os.Bundle) Activity.onCreate()} của bạn.
Làm vy bng cách gi <code>{@link android.app.Activity#setContentView(int) setContentView()}</code>,
chuyn cho nó tham chiếu ti tài nguyên b trí ca bn dưới hình thc:
<code>R.layout.<em>layout_file_name</em></code>.
Ví dụ, nếu b trí XML ca bn được lưu thành <code>main_layout.xml</code>, bn s np nó
cho Hot động ca mình như sau:</p>
<pre>
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
}
</pre>
<p>Phương pháp gi li <code>onCreate()</code> trong Hot động ca bn được gi bi khuôn kh Android khi
Hot động ca bn được khi chy (xem phn tho lun v vòng đời, trong tài liu
<a href="{@docRoot}guide/components/activities.html#Lifecycle">Hot động</a>
).</p>
<h2 id="attributes">Thuc tính</h2>
<p>Mi đối tượng Dng xem và Nhóm Dng xem đều h tr các phiên bn thuc tính XML ca chính mình.
Mt s thuc tính áp dng riêng cho đối tượng Dng xem (ví dụ, TextView h tr thuc tính <code>textSize</code>
), nhưng nhng thuc tính này cũng được kế tha bi bt k đối tượng Dng xem nào mà có th m rng lp này.
Mt s được áp dng chung cho tt c đối tượng Dng xem vì chúng được kế tha t lp Dng xem gc (như
thuc tính <code>id</code>). Và nhng thuc tính còn li được coi là "tham số bố trí," đó là nhng thuc tính
mô t mt s hướng b trí nht định ca đối tượng Dng xem, như được định nghĩa bi đối tượng Nhóm Dng xem
m ca đối tượng đó.</p>
<h3 id="id">ID</h3>
<p>Bt k đối tượng Dng xem nào cũng có mt ID s nguyên được liên kết vi nó để nhn biết duy nht Dng xem trong cây.
Khi ng dng được biên dch, ID này được tham chiếu như mt s nguyên, nhưng ID thường
được gán trong tp XML b trí như mt xâu, trong thuc tính <code>id</code>.
Đây là thuc tính XML chung cho tt c đối tượng Dng xem
(được định nghĩa theo lp {@link android.view.View}) và bn s rt hay s dng nó.
Cú pháp đối vi mt ID bên trong mt tag XML là:</p>
<pre>android:id="&#64;+id/my_button"</pre>
<p>Biu tượng "a móc" (@) đầu xâu th hin rng trình phân tích XML nên phân tích và m rng phn còn li
ca xâu ID và nhn biết nó như mt tài nguyên ID. Biu tượng du cng (+) có nghĩa rng đây là mt tên tài nguyên mi mà phi
được to và thêm vào tài nguyên ca chúng ta (trong tp <code>R.java</code>). Có nhiu tài nguyên ID khác
được cung cp bi khuôn kh Android. Khi tham chiếu mt ID tài nguyên Android, bn không cn biu tượng du cng,
nhưng phi thêm vùng tên gói <code>android</code>, như sau:</p>
<pre>android:id="&#64;android:id/empty"</pre>
<p>Khi đã có vùng tên gói <code>android</code>, giờ chúng ta đang tham chiếu một ID từ lớp tài nguyên <code>android.R</code>
, thay vì lp tài nguyên cc bộ.</p>
<p>Để to các dng xem và tham chiếu chúng t ng dng, mt mô thc thường thy đó là:</p>
<ol>
<li>Định nghĩa mt dng xem/widget trong tp b trí và gán cho nó mt ID duy nht:
<pre>
&lt;Button android:id="&#64;+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="&#64;string/my_button_text"/>
</pre>
</li>
<li>Sau đó, to mt thc th ca đối tượng dng xem và chp nó t b trí
(thường trong phương pháp <code>{@link android.app.Activity#onCreate(Bundle) onCreate()}</code>):
<pre>
Button myButton = (Button) findViewById(R.id.my_button);
</pre>
</li>
</ol>
<p>Định nghĩa các ID cho đối tượng dng xem là vic quan trng khi to mt {@link android.widget.RelativeLayout}.
Trong mt b trí tương đối, các dng xem đồng hng có th định nghĩa b trí ca nó so vi dng xem đồng hng kia,
dng xem mà được tham chiếu bi ID duy nht.</p>
<p>Mt ID không cn phi là duy nht trong toàn b cây, nhưng nên là
duy nht trong b phn ca cây mà bn đang tìm kiếm (thường là toàn b cây, vì thế tt nht là
ID nên hoàn toàn duy nht khi có thể).</p>
<h3 id="layout-params">Tham s B trí</h3>
<p>Các thuc tính b trí XML <code>layout_<em>something</em></code> s định nghĩa
các tham s b trí cho Dng xem phù hp vi Nhóm Dng xem mà nó nm trong đó.</p>
<p>Mi lp Nhóm Dng xem đều trin khai mt lp lng nhau có chc năng m rng {@link
android.view.ViewGroup.LayoutParams}. Lp con này
cha các kiu tính cht mà định nghĩa kích c và v trí ca tng dng xem con cho
phù hp vi nhóm dng xem. Như bn có th thy trong hình 1, nhóm dng xem
m s định nghĩa các tham s b trí cho tng dng xem con (bao gm nhóm dng xem con).</p>
<img src="{@docRoot}images/layoutparams.png" alt="" />
<p class="img-caption"><strong>Hình 1.</strong> Trc quan hóa mt phân cp dng xem vi các tham s
b trí được liên kết vi tng dng xem.</p>
<p>Để ý rng mi lp con LayoutParams đều có cú pháp riêng ca mình cho các giá tr
thiết đặt. Mi phn t con phi định nghĩa LayoutParams cho phù hp vi phn t m ca nó,
mc dù cũng có th định nghĩa LayoutParams khác cho phn t con ca chính nó. </p>
<p>Tt c nhóm dng xem đều có chiu rng và chiu cao (<code>layout_width</code> và
<code>layout_height</code>), và mi dng xem đều phi định nghĩa chúng. Nhiu
LayoutParams cũng có l và vin tùy chn. <p>
<p>Bn có th ch định chiu rng và chiu cao bng các s đo chính xác, mc dù có th
bn s không mun làm điu này thường xuyên. Bn s thường s dng mt trong nhng hng s này để
đặt chiu rng hoc chiu cao: </p>
<ul>
<li><var>wrap_content</var> cho biết dng xem ca bn t định c theo kích thước
mà ni dung ca nó yêu cu.</li>
<li><var>match_parent</var> (được đặt tên <var>fill_parent</var> trước API Mc 8)
cho biết dng xem ca bn có th phóng ln khi nhóm dng xem m ca nó cho phép.</li>
</ul>
<p>Nhìn chung, vic ch định mt chiu rng và chiu cao b trí bng cách s dng các đơn v tuyt đối như
đim nh là điu không được khuyến cáo. Thay vào đó, s dng các s đo tương đối như
s đơn v đim nh độc lp vi mt độ (<var>dp</var>), <var>wrap_content</var>, hoc
<var>match_parent</var>, là mt phương pháp tt hơn, vì nó giúp đảm bo rng
ng dng ca bn s hin th phù hp gia nhiu loi kích c màn hình thiết b khác nhau.
Các kiu s đo được chp nhn được định nghĩa trong tài liu
<a href="{@docRoot}guide/topics/resources/available-resources.html#dimension">
Tài nguyên Có sn</a>.</p>
<h2 id="Position">V trí B trí</h2>
<p>
Hình hc ca mt dng xem là hình ch nht. Dng xem có mt v trí,
được biu din thành mt cp ta độ <em>trái</em> và <em>trên</em> và
hai kích thước, được biu din thành chiu rng và chiu cao. Đơn v ca v trí
và kích thước là đim nh.
</p>
<p>
Có th truy xut v trí ca mt dng xem bng cách gi ra các phương pháp
{@link android.view.View#getLeft()} và {@link android.view.View#getTop()}. Phương pháp đầu trả về tọa độ trái, hay X,
ca hình ch nht biu din dng xem. Phương pháp sau tr v ta độ trên, hay Y,
ca hình ch nht biu din dng xem. Nhng phương pháp này
đều tr v v trí ca dng xem so vi dng xem m ca nó. Ví dụ,
khi <code>getLeft()</code> tr v 20, điu đó có nghĩa là dng xem nm 20 đim nh v
bên phi ca cnh trái ca dng xem m trc tiếp ca nó.
</p>
<p>
Ngoài ra, mt vài phương pháp thun tin được đưa ra để tránh nhng tính toán
không cn thiết, c th là {@link android.view.View#getRight()} và {@link android.view.View#getBottom()}.
Nhng phương pháp này tr v ta độ ca cnh phi và cnh đáy ca hình ch nht
biu din dng xem. Ví dụ, vic gi {@link android.view.View#getRight()}
tương t như tính toán sau: <code>getLeft() + getWidth()</code>.
</p>
<h2 id="SizePaddingMargins">Kích cỡ, Phn đệm và Lề</h2>
<p>
Kích c ca mt dng xem được biu din bng chiu rng và chiu cao. Thc ra mt dng xem
s có hai cp giá tr chiu rng và chiu cao.
</p>
<p>
Cp th nht được gi là <em>chiu rng đo được</em> và
<em>chiu cao đo được</em>. Nhng kích thước này xác định mt dng xem mun phóng ln bao nhiêu
trong dng xem m ca nó. Các
kích thước đo được có th thu được bng cách gi {@link android.view.View#getMeasuredWidth()}
và {@link android.view.View#getMeasuredHeight()}.
</p>
<p>
Cp th hai đơn thun là <em>chiu rng</em> và <em>chiều cao</em>, hoc
đôi khi gi là <em>chiu rng vẽ</em> và <em>chiều cao vẽ</em>. Nhng
kích thước này xác định kích c thc s ca dng xem trên màn hình, ti thi đim v và
sau khi b trí. Nhng giá tr này có th nhưng không nht thiết phi khác vi
chiu rng và chiu cao đo được. Chiu rng và chiu cao này có th ly được bng cách gi
{@link android.view.View#getWidth()} và {@link android.view.View#getHeight()}.
</p>
<p>
Để đo các kích thước ca nó, dng xem cn xét ti phn đệm ca nó. Phn đệm
được biu din bng s đim nh ca phn bên trái, bên trên, bên phi và bên dưới ca dng xem.
Phn đệm có th được s dng để bù tr ni dung ca dng xem bng mt s đim nh
c thể. Ví dụ, phn đệm bên trái bng 2 s đẩy ni dung ca dng xem đi
2 đim nh v bên phi ca cnh bên trái. Phn đệm có th được đặt bng cách s dng phương pháp
{@link android.view.View#setPadding(int, int, int, int)} và được truy vấn bằng cách gọi
{@link android.view.View#getPaddingLeft()}, {@link android.view.View#getPaddingTop()},
{@link android.view.View#getPaddingRight()} và {@link android.view.View#getPaddingBottom()}.
</p>
<p>
Mc dù dng xem có th xác định phn đệm, nó không có bt k s h tr nào cho
lề. Tuy nhiên, các nhóm dng xem li cung cp s h tr như vy. Tham kho
{@link android.view.ViewGroup} và
{@link android.view.ViewGroup.MarginLayoutParams} để biết thêm thông tin.
</p>
<p>Để biết thêm thông tin v kích thước, xem
<a href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">Giá tr Kích thước</a>.
</p>
<style type="text/css">
div.layout {
float:left;
width:200px;
margin:0 0 20px 20px;
}
div.layout.first {
margin-left:0;
clear:left;
}
</style>
<h2 id="CommonLayouts">Các B trí Thường gp</h2>
<p>Mi lp con ca lp {@link android.view.ViewGroup} cung cp mt cách duy nht để hin th
các dng xem mà bn lng trong nó. Dưới đây là mt s kiu b trí ph biến hơn mà được tích hp
trong nn tng Android.</p>
<p class="note"><strong>Lưu ý:</strong> Mc dù bn có th lng mt hoc nhiu b trí vi mt
b trí khác để đạt được thiết kế UI ca mình, bn nên c gng duy trì phân cp b trí ca mình mc nông nht
có thể. B trí ca bn s v nhanh hơn nếu nó có ít b trí lng nhau hơn (phân cp dng xem rng
s tt hơn phân cp dng xem sâu).</p>
<!--
<h2 id="framelayout">FrameLayout</h2>
<p>{@link android.widget.FrameLayout FrameLayout} is the simplest type of layout
object. It's basically a blank space on your screen that you can
later fill with a single object &mdash; for example, a picture that you'll swap in and out.
All child elements of the FrameLayout are pinned to the top left corner of the screen; you cannot
specify a different location for a child view. Subsequent child views will simply be drawn over
previous ones,
partially or totally obscuring them (unless the newer object is transparent).
</p>
-->
<div class="layout first">
<h4><a href="layout/linear.html">B trí Tuyến tính</a></h4>
<a href="layout/linear.html"><img src="{@docRoot}images/ui/linearlayout-small.png" alt="" /></a>
<p>Mt b trí có chc năng sp xếp t chc các b trí con ca nó thành mt hàng ngang hoc thng đứng. Nó
s to mt thanh cun nếu chiu dài ca ca s vượt quá chiu dài ca màn hình.</p>
</div>
<div class="layout">
<h4><a href="layout/relative.html">B trí Tương đối</a></h4>
<a href="layout/relative.html"><img src="{@docRoot}images/ui/relativelayout-small.png" alt="" /></a>
<p>Cho phép bn ch định v trí ca các đối tượng con so vi nhau (đối tượng con A v phía
bên trái ca đối tượng con B) hoc so vi đối tượng m (được căn theo bên trên đối tượng mẹ).</p>
</div>
<div class="layout">
<h4><a href="{@docRoot}guide/webapps/webview.html">Dng xem Web</a></h4>
<a href="{@docRoot}guide/webapps/webview.html"><img src="{@docRoot}images/ui/webview-small.png" alt="" /></a>
<p>Hin th trang web.</p>
</div>
<h2 id="AdapterViews" style="clear:left">Xây dng B trí bng mt Trình điu hp</h2>
<p>Khi ni dung cho b trí ca bn động hoc chưa được xác định trước, bn có th s dng mt b trí có chc năng
to lp con {@link android.widget.AdapterView} để đưa vào b trí có dng xem vào thi gian chy. Mt
lp con ca lp {@link android.widget.AdapterView} s s dng mt {@link android.widget.Adapter} để
gn kết d liu vi b trí ca nó. {@link android.widget.Adapter} đóng vai trò trung gian gia ngun
d liu và b trí {@link android.widget.AdapterView} &mdash;{@link android.widget.Adapter}
s truy xut d liu (t mt ngun chng hn như mt mng hoc truy vn cơ s d liu) và chuyn tng mc nhp
thành mt dng xem có th thêm vào b trí {@link android.widget.AdapterView}.</p>
<p>Các b trí ph biến được h tr bi trình điu hp bao gm:</p>
<div class="layout first">
<h4><a href="layout/listview.html">Dng xem Danh sách</a></h4>
<a href="layout/listview.html"><img src="{@docRoot}images/ui/listview-small.png" alt="" /></a>
<p>Hin th mt danh sách ct cun đơn.</p>
</div>
<div class="layout">
<h4><a href="layout/gridview.html">Dng xem Lưới</a></h4>
<a href="layout/gridview.html"><img src="{@docRoot}images/ui/gridview-small.png" alt="" /></a>
<p>Hin th mt lưới cun gm nhiu hàng và ct.</p>
</div>
<h3 id="FillingTheLayout" style="clear:left"in d liu vào mt dng xem trình điu hp</h3>
<p>Bn có th đưa vào mt {@link android.widget.AdapterView} chng hn như {@link android.widget.ListView} hoc
{@link android.widget.GridView} bng cách gn kết thc th {@link android.widget.AdapterView} vi mt
{@link android.widget.Adapter}, nó truy xut d liu t mt ngun bên ngoài và to mt {@link
android.view.View} để biu din tng mc nhp d liu.</p>
<p>Android cung cp mt vài lp con ca {@link android.widget.Adapter} rt hu ích cho vic
truy xut các kiu d liu khác nhau và xây dng dng xem cho mt {@link android.widget.AdapterView}. Hai
trình điu hp ph biến nht là:</p>
<dl>
<dt>{@link android.widget.ArrayAdapter}</dt>
<dd>S dng trình điu hp này khi ngun d liu ca bn là mt mng. Theo mc định, {@link
android.widget.ArrayAdapter} to mt dng xem cho mi mc mng bng cách gi {@link
java.lang.Object#toString()} trên từng mục và đặt nội dung trong một {@link
android.widget.TextView}.
<p>Ví dụ, nếu bn có mt mng xâu mà bn mun hin th trong mt {@link
android.widget.ListView}, hãy khi to mt {@link android.widget.ArrayAdapter} mi bng cách s dng
hàm dng để ch định b trí cho tng xâu và mng xâu:</p>
<pre>
ArrayAdapter&lt;String> adapter = new ArrayAdapter&lt;String>(this,
android.R.layout.simple_list_item_1, myStringArray);
</pre>
<p>Các tham đối cho hàm dng này là:</p>
<ul>
<li>ng dng ca bn {@link android.content.Context}</li>
<li>B trí cha mt {@link android.widget.TextView} cho mi xâu trong mng</li>
<li>Mng xâu</li>
</ul>
<p>Sau đó ch cn gi
{@link android.widget.ListView#setAdapter setAdapter()} trên {@link android.widget.ListView} của bạn:</p>
<pre>
ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);
</pre>
<p>Để tùy chnh din mo ca tng mc, bn có th khng chế phương pháp {@link
java.lang.Object#toString()} cho các đối tượng trong mảng của mình. Hoặc, để tạo một dạng xem cho từng
mc không phi là mt {@link android.widget.TextView} (ví dụ, nếu bn mun mt
{@link android.widget.ImageView} cho tng mc mng), hãy m rng lp {@link
android.widget.ArrayAdapter} và khng chế {@link android.widget.ArrayAdapter#getView
getView()} để tr v kiu dng xem mà bn mun cho tng mc.</p>
</dd>
<dt>{@link android.widget.SimpleCursorAdapter}</dt>
<dd>S dng trình điu hp này khi d liu ca bn đến t mt {@link android.database.Cursor}. Khi
s dng {@link android.widget.SimpleCursorAdapter}, bn phi ch định mt b trí để s dng cho tng
hàng trong {@link android.database.Cursor} và nhng ct nào trong {@link android.database.Cursor}
nên được chèn vào dng xem nào ca b trí. Ví dụ, nếu bn mun to mt danh sách
tên người và s đin thoi, bn có th thc hin mt truy vn mà tr v mt {@link
android.database.Cursor} cha mt hàng cho tng người và nhiu ct cho các tên và
s đin thoi. Sau đó, bn to mt mng xâu ch định nhng ct nào t {@link
android.database.Cursor} mà bn mun trong b trí cho tng kết qu và mt mng s nguyên ch định các
dng xem tương ng mà tng ct s được đặt vào:</p>
<pre>
String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER};
int[] toViews = {R.id.display_name, R.id.phone_number};
</pre>
<p>Khi bn khi to {@link android.widget.SimpleCursorAdapter}, hãy chuyn b trí cn s dng cho
tng kết quả, {@link android.database.Cursor} cha các kết quả, và hai mng sau:</p>
<pre>
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.person_name_and_number, cursor, fromColumns, toViews, 0);
ListView listView = getListView();
listView.setAdapter(adapter);
</pre>
<p>Sau đó, {@link android.widget.SimpleCursorAdapter} to mt dng xem cho tng hàng trong
{@link android.database.Cursor} s dng b trí được cung cp bng cách chèn tng mc {@code
fromColumns} vào dng xem {@code toViews} tương ng.</p>.</dd>
</dl>
<p>Trong vòng đời ng dng ca bn, nếu bn thay đổi d liu liên quan được đọc bi
trình điu hp ca mình, bn nên gi {@link android.widget.ArrayAdapter#notifyDataSetChanged()}. Nó sẽ
thông báo vi dng xem đính kèm rng d liu đã được thay đổi và dng xem nên t làm mi.</p>
<h3 id="HandlingUserSelections">X lý s kin nhp</h3>
<p>Bn có th phn hi các s kin nhp trên tng mc trong mt {@link android.widget.AdapterView} bng cách
trin khai giao din {@link android.widget.AdapterView.OnItemClickListener}. Ví dụ:</p>
<pre>
// Create a message handling object as an anonymous class.
private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position, long id) {
// Do something in response to the click
}
};
listView.setOnItemClickListener(mMessageClickedHandler);
</pre>