You are on page 1of 22

Di ng cho mi ngi: Lp trnh x l c ch trong Android

Cho php c ch lt tay trong ng dng Android ca bn


Nhng ngi dng di ng thng d b phn tm, hay bn rn v c nhng hn
ch, do nn xy dng giao din cho ng dng di ng ca bn mt cch hp l.
Andrew Glover tho lun v cc vn quan trng phn bit ng dng di ng vi
ng dng web, sau hng dn bn thng qua vic to mt giao din ngi dng
cho ng dng di ng s dng c ch lt tay chuyn hng thay v dng cc
nt bm.
Xem thm bi trong lot bi ny | 0 Bnh lun:
Andrew Glover, Gim c cng ngh, App47
30 08 2013
Mc lc
Gii thiu
About this series
Pht trin ng dng di ng ang bng n, v l th trng cho cc nh pht
trin ng dng di ng. Lot bi ny trn developerWorks gii thiu tng quan v
di ng cho cc nh lp trnh c kinh nghim nhng vn cn mi vi lnh vc di
ng ny.
Bt u vit cc ng dng bng m Java, sau m rng b cng c ca bn
thm vo cc ngn ng JVM, cc Framework ngn ng kch bn,
HTML5/CSS/JavaScript, cc cng c ca bn th ba, v hn th na. Tng bc
mt, bn s rnh v cc k nng cn thit pht trin bt k ng dng di ng
no.
Khi bn xy dng mt ng dng di ng, cng nh xy dng mt ng dng web,
hy ghi nh iu ny (k c vi ngi dng). Lun lun hiu ng dng ca bn
mc ch l g v lm th no mi ngi hng li t n. Nhng loi thng tin
no s hin th trn ng dng ca bn, nhng chc nng no s c, v lm cch no
ngi dng c th truy cp vo c hai? Cung cp cc hng dn y
ngi dng tri nghim ng dng di ng ca bn gip m bo tnh thnh cng
ca n.
Khng ging nh pht trin giao din truyn thng cho my tnh bn hay cc
ng dng web, cc quy tc ca ng dng di ng t hn nhiu. Khi bn thit k
mt giao din ng dng mobile, hy suy ngh tht n gin. Hu ht cc thit b di
ng u nh gn (tr khi bn ang dng Samsung Note 4 in thoi di ng
ln nht hay my tnh bng m ti tng thy). Kch thc nh c mt khp mi ni

nh mt phn thit yu v l l do ti sao mi ngi mang chng khp ni v s


dng bt c lc no. iu ny dn n mt pht hin quan trng v ng dng di
ng, l hu ht ngi dng khng ch trng vo ng dng ca bn khi s dng
n!
Mt vi ng dng di ng c xy dng dnh ring cho my tnh bng v ch s
dng cho lnh vc kinh doanh (nh bc s truy cp vo h s bnh nhn). Hu ht
ng dng di ng u truy cp trn cc thit b nh bi ngi dng v cng lm
nhiu vic khc na. Nh khi ti ang xp hng mua mt vi th trong ca
hng tp ha, ti c th chi mt vi vn Angry Birds. Nu ti xung my bay sau
mt chuyn bay di, ti c th s dng thi gian kim tra email. Nhng nu
n khin ti mt nhiu thi gian th ti thch bc ti trc hn.
iu khc bit gia ng dng di ng v cc ng dng trn web, trn my tnh c
nhn chnh l s lng: i vi ng dng web, d dng c trn 100 thit b di
ng. Cung cp nhiu hn cc dch v xng ng vi ng dng ca bn. To s d
dng v hp dn khi s dng. Nu bn mong i ngi dng c hng dn s
dng (RTM - read the manual), th iu c th l vn i h, vn tr
thnh vn ca chnh bn. Vic ngi dng ca bn l bc s truy cp vo h s
bnh n hay ch l ngi chi Cut-the-Rope trong khi ch i u khng quan
trng. Nu ng dng di ng ca bn lm mt nhiu thi gian ci t, th ngi
dng c th tm kim mt ng dng khc trong kho ng dng.
V u trang
(Hello) Overheard Word
Nu bn c bi u tin trong lot bi ny, bn bit c cch ci t mi
trng pht trin Android trn Eclipse, v cu hnh Android SDK cho phin bn
Android 4.2. Bn cng vit ng dng Android c bn u tin, Hello World.
Ln ny, cng theo cch , bn s thit k mt ng dng c o hn.
ng dng mu ca ti, Overheard Word, c thit k nhm to s vui v v d
dng hc t vng mi v thc hnh chng trong ng cnh vn bn tht tnh
c v y cng l s thch ca ti. Trong ng dng ny, ngi dng s hc mt vi
t v sau lm bi kim tra. Giao din bao gm mn hnh hin th v hai nt
bm. Mn hnh dng hin th t v ngha ca chng, trong khi cc nt bm
cho ngi dng iu hng ng dng.
Overheard Word l ng dng di ng n gin v th v cho nhng ngi yu
thch hc t vng (nh ti ng t aficionados (ngi hm m) v t connoisseurs

(ngi snh si)). Quan trng hn, v d ny nh mt ng dng Android hp l v


bn c th trin khai n trn thit b tht chy Android.
Mc tiu ca ng dng
Trc khi bn thit k ng dng, ti mun kho st mc tiu ca th trng. ng
dng m ti xy dng Phn 1 l dnh cho Android 4.2, hay th vin API
phin bn 17. Hy nhn vo bn bo co ca Google phn phi Android hin ti
(Hnh 1):
Hnh 1. Th phn cc phin bn Android

My tnh bng so vi in thoi


Trong Hnh 1, my tnh bng c bn nhiu nht nh s gia tng ca ngi dng
Android phin bn 15. Hu ht my tnh bng hin nay chy Android 4.x tr ln.
Nu bn khng vit ng dng dnh ring cho my tnh bng, vy hy tp trung vo
phin bn Android 9 v 10, bi v n c hin din trn hu ht cc thit b di
ng.
Hnh 1 cho thy rng hin nay phin bn Android 2.3.x (API 9 v 10) chim
khong mt na th phn thit b Android! Chng phi nu mt na s thit b ang
chy Android 2.3.x th chng ta nn tp trung pht trin cho th phn hay sao?
V u trang
Khi ng mt d n mi

Trong bi trc, ti ci t th vin API 4.2. By gi ti mun ci bn Android


2.3.3 (API 10). Khi kim tra Android SDK Manager, nh Hnh 2, ti cng thy c
mt vi bn cp nht:
Hnh 2. Mt Android SDK ci t vi ch duy nht mt phin bn ci t

Nu bn mun lm theo ti, hy nhp vo ty chn ci t Android 2.3.3 (API


10) v lm theo nhng ch th ca trnh qun l.
Hnh 3. Ci t Android 2.3.3 (API 10)

Sau khi ti v mt API mi cho Android, bn c th to mt trnh gi lp tng


thch hay thit b my o Android (AVD - Android Virtual Device). T trnh qun
l Android SDK, chn Tools, sau n ty chn Manage AVDs. Hy chc chn
rng bn to mt AVD vi Target l API Level 10.
Hnh 4. To mt AVD

Tip n, to mt d n New Android Application v t tn cho n. Ti t tn


l ng dng Overheard Word. Thit lp target cho ng dng l API 10 n c
h tr trn nhiu thit b nht. Hy xem xt k Hnh 5 v lu rng ti cng chn
th vin bin dch (compile) l API 10. Bn c th chn bin dch vi phin bn
Android mi hn nhng ti thch lp trnh v bin dch cng mt API. (Nu ti
bin dch vi mt API mi hn, ti phi cn thn khng s dng bt k tnh

nng no ca n trong ng dng ca ti, v n c th to ra kt qu khng tng


thch.)
Hnh 5. To mt d n Android mi trong Eclipse

Khi bn nhn Next, hy chc chn rng bn khng to mt d n Library. Hy


gi cc thit lp mc nh nh bn thit lp cho ng dng Hello World. Sau
ny, bn cng c th tin hnh nhng thay i nh (nh thay i biu tng cho
ng dng).
Bc ci t cui cng l t tn cho Activity u tin. Ti thch
dng OverheardWord hn thay v Main, v tng t, t tn cho layout. Nu bn
cng s dng Target l API 10, bn s c mt vi la chn Navigation Type trong
hp thoi cui. Hin ti ng lo lng v iu ; ti s hng dn bn cch to mt
menu iu hng trong bi sau. Cn i vi ng dng ny, hy
nguyn Navigation Type l none.
Hnh 6. To mt Activity mc nh

Nhn Finish to d n nh d n HelloWorld mc nh m bn lm trc


y.
V u trang
Xy dng giao din ngi dng Android

By gi bn sn sng xy dng mt giao din ngi dng n gin. Hy nh


li, mt giao din ngi dng Android hon ton c nh ngha di dng XML
m bn c th lm quen. Nu bn pht trin giao din ngi dng Java theo
cch truyn thng, bn c th thy Android cng s dng layouts. Vi nhng
layout (b cc) ca Android, bn c th nh ngha (hay gi ) thit b bit cch
hin th cc thnh phn trong ng dng ca bn. Cc kiu layout bao gm:
Linear, cc thnh phn c t chc theo kiu ngang hoc dc (ging nh cc ct
ca t bo)
Relative, cc thnh phn cch nhau mt khong tng i (v d mt widget 2
bn phi widget 1)

Table, cc thnh phn c hin th theo ct v dng


Cn nhiu kiu layout na, nhng bn s bt u lm quen trc vi ba kiu ny!
Trong mt layout, bn c th nh ngha widgets, l nhng thnh phn thng
thng m bn c th tm thy bt c giao din ngi dng no. Nn tng
Android cung cp nhng widget c bn nh nhng buttons, text-boxes, v dropdown lists, v nhiu widget phc tp nh image viewers v spin-wheels.
Ti xc nh c nhng yu cu giao din ca Overheard Word:
3 trng vn bn ( lu mt t, mt phn lu pht m, v nh ngha)
2 nt bm (1 nt chn t v 1 nt lm bi kim tra)
nh ngha layout
Trc tin ta t giao din ngi dng Android li vi nhau nh ngha layout,
cng vi cc widgets m bn mun km theo. Trong Lit k 1, u tin ti nh
ngha mt LinearLayout vi 3 TextViews. Tip theo, ti to mt sub-layout
(mt LinearLayout khc) c 2 Buttons.
Lit k 1. nh ngha mt LinearLayout trong Android
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".OverheardWord" >
<TextView
android:id="@+id/word_study_word"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="10dp"
android:layout_marginTop="60dp"
android:textColor="@color/black"
android:textSize="30sp" />

<TextView
android:id="@+id/word_study_part_of_speech"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="10dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:textColor="@color/black"
android:textSize="18sp" />
<TextView
android:id="@+id/word_study_definition"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:textColor="@color/black"
android:textSize="18sp" />
<LinearLayout
android:id="@+id/widget62"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp" >
<Button
android:id="@+id/next_word"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="@string/next_word" />
<Button
android:id="@+id/take_quiz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

android:layout_marginLeft="50dp"
android:layout_marginTop="20dp"
android:text="@string/take_quiz" />
</LinearLayout>
</LinearLayout>
Nh bn thy XML trong Lit k 1, mi widget c mt s thuc tnh nh hng
trc tip ln n. V d, mt button (nt bm) trong 2 button c mt phn t text m
chui ca n tr ti resource element (phn t ti nguyn). Resource element c
nh ngha trong mt tp resourcec tn l strings.xml, c cha trong th
mc res/values. Lit k 2 hin th tp strings.xml.
Lit k 2. tp resource nh ngha mu v nhn ca button
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Overheard Word</string>
<color name="white">#ffffff</color>
<color name="black">#000000</color>
<string name="next_word">Next word</string>
<string name="take_quiz">Take quiz</string>
</resources>
Nu bn mun bit giao din ng dng ca bn trng nh th no, bn c th bt
u vi trnh m phng. Ti nhn vo th Graphical Layout trong Eclipse,
nh Hnh 7.
Hnh 7. ng dng Overheard Word chy trn Eclipse

Placeholder text
Khi xem giao din ngi dng, ti hay nhm ln khong trng i vi thuc tnh
word. Nhng khng sao: ti s thm mt vi on vn bn mu cho nhiu tng
thc t rng on vn bn s hin th nh th no trc khi ti vit m lnh..
u tin, ti thm mt thuc tnh android:text cho mi widget TextView, ging
nh ti lm vi cc nhn ca button. By gi ti thm cc placeholder text nh
sau:
Lit k 3. To cc placeholders vi android:text
<TextView
android:id="@+id/word_study_part_of_speech"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="10dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:textColor="@color/black"
android:textSize="18sp"
android:text="Part of Speech"/>
Nh bn c th thy trong Lit k 3, ti thm mt on vn bn mu ("Part of
Speech") vo TextViewword_study_part_of_speech. Ti cp nht mt s kiu
phn t bng cch tng khch thc ca vn bn, nh ngha mu vn bn v canh
gia widget trong layout. Cc thuc tnh trong Lit k 3 l ph bin nh ngha

cc widget trong mt ng dng Android; khi bn xy dng nhiu ng dng, bn s


dn yu thch chng. Ti cng nh ngha trc tip on vn bn mu trong tp
layout hn l trong tp ti nguyn (resource) bi v gi tr ca vn bn ch l tm
thi trong sut qu trnh thit k.
Khi chy ng dng t Eclipse, ti hnh dung xem ngi dng s thy g khi ng
dng bt u:
Hnh 8. Overheard Word chy trong AVD

C mt s iu cha ng v thit k giao din ngi dng. Bn c th on l


g khng? Vng, chnh l cc nt bm! Liu chng c tht s cn thit khng?
Ngi dng c thng nhn vo cc nt bm trn ng dng di ng khng? C l
ngi dng c th qut tay sang tri hay phi xem t mi v qut xung lm
bi kim tra.
Vic b i nhng nt bm gip giao din trng sch s v ng dng Overhead
Word p ng c mong i ca ngi dng hn. Ti c th d dng thc hin
cc hnh vi c ch, bn s thy iu .
V u trang
Vit m x l c ch trong Android
Ti nh ngha mn hnh khi to cho ng dng Overheard Word v sn sng
thm mt vi hnh vi. Vi kinh nghim lm vic vi giao din ngi dng Java
truyn thng, mt ln na ti c th ng dng n trc tip ln Android, trong ,
u tin ti thc hin cc b lng nghe phn hi ca s kin. Nu gi li 2 nt
bm, ti c th s dng b lng nghe OnClickListener nh km hnh vi vo
mi hnh ng nhn nt (button), sau gn phng thc setOnClickListener cho
mi button widget.
Cc lp n danh
Cc lp n danh l nhng lp cc b nhng khng c tn: bn c th va nh
ngha va khi to cc lp n danh trong mt biu thc duy nht. Ti thy rng cc
lp n danh rt tin dng, do ti dng n rt nhiu, c bit l khi lp trnh hnh
vi giao din ngi dng.
Trong khi ti chc rng c th s dng OnClickListener, ti c th kt thc vi
nhiu tp lp cho nhiu widget. Ti khng thch nhng m hn n , do ti
thc hin vi cc lp n danh.
Mc d c ch lt tay khng phi l mt khi nim trong lp trnh giao din
truyn thng, n cng thc hin tng t nh khi vit m x l vic nhn button.
Ti bt u vi mt touch listener (trnh lng nghe ng tc chm), l mt phn
ca nn tng Android, v sau cung cp mt hnh vi tng ng. pht hin
mt chuyn ng khi lt tay, ti cng tnh ton s khc bit gia cc c ch bt
uv kt thc, thm vo l tc ca hnh ng lt tay. (Ti thy rng ta
Catesian gip ch c trong vic ny: hnh ng lt tay sang tri v phi s da
trn trc X, cn hng trn v di s da trn trc Y.)

Mt c ch c th xy ra bt c u trn giao din. Khi bn kt hp loi lng


nghe ny vo bt k thnh phn no ca mt giao din ng dng, hy bt u vi
layout (trong Android, layout i din nh l mt View) v bao gm c widget
button n gin nht. Ti s dng b lng nghe SimpleOnGestureListener ca
Android khi to thc thi c ch, sau gn n ln View thng qua phng
thconTouchListener. Bng cch nh km mt th hin ca view, ti c th nhn
dng c hnh ng lt tay ngang qua ton b giao din ch khng ch trong
mt thnh phn, nh mt trnh xem nh nh gn.
Trc khi lm c iu , hy ngh xem, ti phi vit mt lp lm nhim v
pht hin ra cc chuyn ng ca ngn tay trn thit b di ng.
SwipeDetector
Ta rt d nhn dng hnh ng nhn vo button. Nn tng ca h thng hot ng
da trn cc chi tit ta ca vin button, v th bn c th b qua vic nh
ngha chng mt cch th cng. Lp trnh ng dng ca bn nhn bit v phn
hi li chuyn ng lt tay l mt vic phc tp. Android h tr rt nhiu cho lp
trnh vin, do cng vic chng nhng nh nhng hn m cn cung cp cho bn
s linh hot cao. Bn c th chn nhn dng mt ci lt tay n nh ti lm
y. Bn cng c th nhn dng chuyn ng ca ngn tay khc, chng hn i khi
c chuyn ng c xt trong game.
Nhn li thit b di ng
Bn khng thc mc rng b lng nghe s kin ca ng dng di ng vn c th
c nhn dng bng cchclick (nhp)? Ln cui cng ti kim nghim iu ,
ngi dng nhn (press) button trn thit b di ng ca h hn l nhp (click) nh
khi dng chut trn my tnh. Mt phn ca vic tr thnh mt nh pht trin di
ng c lin quan n vic hiu r cc thut ng, c ngha l bn suy ngh li c
ch web v my tnh truyn thng trong vic nhp button, khi ng menu, v
thm ch l giao din ngi dng.
Lp trnh nhn dng lt tay c lin quan n cc tnh ton Cartesian. C th,
nu ta bt u ca im chm tr i ta kt thc trn trc ln
hn khong cch xc nh trc, v nu vn tc ca chuyn ng ln hn so
vi gi tr xc nh khc, th bn c th gi nh mt cch hp l l ngi dng
ang lt tay t bn phi ng dng bn hin th bn tri. Cc ng tc lt tay
ln v xung cng tnh ton tng t nh vy i vi trc Y.

Ti c th tru tng ha qu trnh logic ny vo mt lp n gin nh khi lm


ton tiu hc. B lng nghe SimpleOnGestureListener c mt phng thc c
gi lonFling. Phng thc onFling c hai loi MotionEvent (cho im bt u
(start) vim kt thc (end)) tng trng cho vn tc X v 2 float tng trng
cho vn tc Y. Lp SwipeDetector trong Lit k 4 phc ha 4 phng thc y
phm vi ca chuyn ng: tri , phi, trn, v di.
Lit k 4. SwipeDetector
import android.view.MotionEvent;
public class SwipeDetector {
private int swipe_distance;
private int swipe_velocity;
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
public SwipeDetector(int distance, int velocity) {
super();
this.swipe_distance = distance;
this.swipe_velocity = velocity;
}
public SwipeDetector() {
super();
this.swipe_distance = SWIPE_MIN_DISTANCE;
this.swipe_velocity = SWIPE_THRESHOLD_VELOCITY;
}
public boolean isSwipeDown(MotionEvent e1, MotionEvent e2, float velocityY)
{
return isSwipe(e2.getY(), e1.getY(), velocityY);
}
public boolean isSwipeUp(MotionEvent e1, MotionEvent e2, float velocityY) {
return isSwipe(e1.getY(), e2.getY(), velocityY);
}
public boolean isSwipeLeft(MotionEvent e1, MotionEvent e2, float velocityX) {
return isSwipe(e1.getX(), e2.getX(), velocityX);

}
public boolean isSwipeRight(MotionEvent e1, MotionEvent e2, float velocityX)
{
return isSwipe(e2.getX(), e1.getX(), velocityX);
}
private boolean isSwipeDistance(float coordinateA, float coordinateB) {
return (coordinateA - coordinateB) > this.swipe_distance;
}
private boolean isSwipeSpeed(float velocity) {
return Math.abs(velocity) > this.swipe_velocity;
}
private boolean isSwipe(float coordinateA, float coordinateB, float velocity) {
return isSwipeDistance(coordinateA, coordinateB)
&& isSwipeSpeed(velocity);
}
}
By gi ti c mt lp tin dng cho ti bit c liu c ch c xy ra hay khng,
v ti c th a n vo giao din. Nh li khi ln u ti to mt Activity mc
nh, tn l OverheardWord. Ti b tt c m mc nh m Eclipse sinh ra, v
thm vo mt s th. lng nghe v phn hi li hnh ng lt tay, ti nh
ngha mt GestureDetector cho Android, n nhm thc hin s
kin OnGestureListener. Rt may, Android to ra mt lp tin li m ti c th
thc hin thng qua mt lp n danh tn l SimpleOnGestureListener. Sau ti
ghi phng thc onFling.
Nhn dng hnh ng lt tay trong giao din ngi dng
Trong phng thc onCreate ca Activity, ti bt u to mt GestureDetector vi
mt SimpleOnGestureListener, c dng trong lp SwipeDetector.
Tip theo, ti vit mt hp thoi nh ch ra rng s kin c ging ln khi c
ai lt tay qua. y l loi hp thoi nh, vng i ngn, trn Android gi
l Toast. Trong mt vi trng hp, mt Toast c th bao gm ch mt dng m.
Lit k 5. GestureDetector
private GestureDetector initGestureDetector() {
return new GestureDetector(new SimpleOnGestureListener() {

private SwipeDetector detector = new SwipeDetector();


public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
try {
if (detector.isSwipeDown(e1, e2, velocityY)) {
return false;
} else if (detector.isSwipeUp(e1, e2, velocityY)) {
showToast("Up Swipe");
}else if (detector.isSwipeLeft(e1, e2, velocityX)) {
showToast("Left Swipe");
} else if (detector.isSwipeRight(e1, e2, velocityX)) {
showToast("Right Swipe");
}
} catch (Exception e) {} //for now, ignore
return false;
}
private void showToast(String phrase){
Toast.makeText(getApplicationContext(), phrase,
Toast.LENGTH_SHORT).show();
}
});
}
By gi ti to mt phng thc initGestureDetector tnh ton phm vi v vn
tc lt tay ca ngi dng. u tin, to ra mt th hin n
ca SimpleOnGestureListener v cung cp thc hin cho phng thc onFling.
Lu cch m phng thc onFling s dng SwipeDetector. V d, nu hnh ng
lt tay din ra, mt Toast hin th d tm chuyn ng.
Tip theo, ta gn cc b nhn din lt tay vo giao din ngi dng. Ti bt u
ng k mt vi b lng nghe vi th hin ca View.
Lit k 6. ng k nhn din lt tay trn View
private GestureDetector gestureDetector;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_overheard_word);

gestureDetector = initGestureDetector();
View view = findViewById(R.id.LinearLayout1);
view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
});
view.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
}
});
}
Trong phng thc onCreate, ti qun l th hin ca View thng qua mt Id.
Hu ht cc nh pht trin Java nh gi cao s tin dng Android-ism ny.
Tm view theo phng php ID
Hy nh khi bn nh ngha XML cho giao din, cng vi cc gi tr tng ng
trong tp tin ti nguyn khc nhau (nh strings.xml)? Khi ti bin dch ng dng
Android, m XML chuyn thnh m t sinh v gi Id tng ng vo mt lp
gi l R. Hy kim tra lp R trong th mc gen thuc d n ca bn trc khi tip
tc.
Xem xt tp layout XML ca bn (bn c th nh rng ti t tn
l activity_overheard_word.xml). Trong tp XML , mi widget u c thuc
tnh id. V d, id ca layout trong ng dng ca ti
l android:id="@+id/LinearLayout1", hay ngn hn lLinearLayout1. Tn Id c
Eclipse sinh ra t ng nhng ti c th thay i bt k lc no. iu quan trng
l id, LinearLayout1, c thuc tnh tng ng vi lp R, nh trong Lit k 7.
Lit k 7. Widget IDs trong lp R
public static final class id {
public static final int LinearLayout1=0x7f090000;
public static final int action_settings=0x7f090004;
public static final int word_study_definition=0x7f090003;
public static final int word_study_part_of_speech=0x7f090002;
public static final int word_study_word=0x7f090001;
}

Vic lin kt ni dung ca tp XML vi tp R tng ng, ti c th tham kho n


cc widget m khng cn phn tch XML. V vy tr v phng
thc onCreate ca Activity, ti c th nhn mt tham chiu n widget
ca View thng qua id ca n: R.id.LinearLayout1. Phng
thc findViewById c cung cp bi nn tng Android khi bn m rng Activity.
Finger swiping good!
Sau khi c mt th hin View, ti c th nh km th hin gestureDetector thng
qua setOnTouchListener. Trong Lit k 6, lp n danh khc by gi x l tt c
hnh vi chm ca ti. Khi ngi dng chm vo mn hnh thit b, s kin ny
c ging ln v ch ngestureDetector. Ti cng thc hin
mt OnClickListener v t n vo phng thc setOnClickListener; nhng trong
trng hp ny, lp n danh khng c hnh vi no.
Vi tt c nhng iu , ti c mt giao din khc n gin c th phn hi c ch
lt tay. Trong trng hp ny l ba trong s chng: tri, phi, v hng ln. Hy
chy th on m trong AVD ca bn. m phng c ch lt tay, hy dng
chut v ko qua tri, phi, hay ln.
By gi, lm sao chy ng dng ny ln thit b tht?
V u trang
Trin khai
phn hi li s ph bin ca virus, trojan v cc phn mm c hi gy nguy
hi cho ngi dng, c Apple v Google u gii thiu mu m xc thc (code
signing) cho ng dng ca bn th ba chy trn cc thit b tng ng. Trn l
thuyt, m xc thc ng vai tr nh l bo him m mt ngi c uy tn xy dng
ng dng m khng ai can thip vo tp m nh phn trc khi ci t. Thc t,
Google v Apple cung cp cc m xc thc bo mt khc nhau. Khi ti xc thc
ng dng Android, v d, ti c th khng nh ti l mt ngn hng quc gia ni
ting. Nhng ti khng th lm nh vy khi ng k ng dng ca ti trn iOS hay
Windows Phone 8.
Trong mi trng pht trin, m xc thc khng ng lo ngi. Trong thc th,
Android v Eclipse xy dng m xc thc nh phn vi mt kha pht trin m bn
khng bit. V vy, vic a ng dng n mt thit b th khng kh trong mi
trng pht trin. Cch n gin nht a ng dng ca bn ln thit b di ng
l gn thit b Android ca bn vo my tnh.

Tip theo, vo Eclipse, nhp chut phi vo d n (project) ca bn, v chn ty


chn Run As menu, sau chn Run Configurations. Eclipse s hin th hp
thoi cu hnh ni bn c th chn d n ca mnh v nhp vo th Target,
nh Hnh 9.
Hnh 9. Chn thit b chy ng dng ca bn

Bn c th chn Always prompt to pick device (nu bn mun) hoc Launch on


all compatible devices/AVD's. Nu bn chn ci sau ging ti, Active Devices,
sau nhp Run. Nu bn vit m ging nh ti th mt lc sau, tin ch s hin
th trn thit b ca bn. Lt tay qua tri, phi, ln, v thy rng cc hp thoi n
gin xc nhn tng hnh ng.
Cc thit lp bo mt
Nu bn khng th ti ng dng t email hay Dropbox, hy vo mc thit lp
(settings) v kch hot Unknown Sources nm trong mc Security Settings. Sau
, bn s c th ci t ng dng khng c trn Google Play, bao gm c ng
dng ang pht trin ca bn.
C mt cc khc trin khai ng dng ca bn l gi tp .apk ca bn qua email,
sau m n trn thit b Android v lm theo hp thoi ch dn ci t. Hoc bn
c th ti tp.apk ln mt dch v lu tr nh Dropbox, sau m ng dng
Dropbox trn thit b ca bn v ci t n. Tp .apk cho ng dng ca bn l th
mc bin trong d n, ni Eclipse t cc m nh phn tng ng.

Hy nh rng c ch trin khai l th nghim ch cha phi phn phi. phn


phi v kim tin t ng dng ca bn cn thng qua nhiu bc hn, ti s tho
lun iu ny trong mt bi vit sau.
V u trang
Kt lun
Thit k mt ng dng di ng c ngha l lm cho n n gin, d dng. Ln ny,
bn hc cch vit mt ng dng di ng phn hi li c ch lt tay thay v
dng cc button (nt bm) nh trn web v my tnh. Trong nhiu trng hp, mt
ng dng di ng c th c li vi mt hay hai button. Hy chc chn rng chng
ph hp vi th hiu ca ngi dng. Vi ng dng Overhead Word qu n gin
ca ti, ti khng cn thit phi c cc button, v ti thy ngi dng thng s
dng ng tc lt ln, lt xung rt nhiu.
Ti c ni rng ng dng di ng s c trin khai nhanh chng y nhng ch
i su vo vic th nghim bn vn cha trin khai sn phm c. Hu ht
ngi dng s khng ci t cc ng dng khng ng tin cy, l l do ng
dng thnh cng nht c phn phi bi mt kho trung gian nh Google Play,
iTunes App Store, hay Amazon Appstore cho Android. Trong bi tip theo, ti s
ni qua v cc tiu chun an ninh ca mt kho ng dng. Qu trnh i qua mt
vi bc xc thc ng dng ca bn. iu quan trng l sau ng dng ca bn
c lu tr bi mt nh phn phi ln, sn sng cho c th gii.

You might also like