You are on page 1of 54

ProgramaoparaaPlataformaAndroidAula5

Sudoku
Renandolayouts
Lidandocomtelasemmodopaisagem
Invocandoa@vidadesdentrodea@vidades
Usandotemasparamelhorarlayouts
Depurandoviaoconsoledesada
Carregandoumaa@vidade
Sudoku
Sudokuumjogoderaciocnio,
cujoobje@vopreencheruma
matrizde9x9casascom
nmerosinteirosentre1e9
inclusive,detalformaque
nenhumalinha,colunaou
diagonalpossuanmerosiguais.

Este exemplo foi retirado do Captulo 3 do livro


Hello, Android (The Pragmatic Programmers)
Por Ed Burnette
VisoGeraldoJogo
Prefs

Sudoku Game Keypad

About PuzzleView

rve
Para que se
essas
cada uma d
classes?
VisoGeraldoJogo

Prefs

Sudoku Game Keypad

About PuzzleView
Criandoo
projeto
Sudoku.java

APrimeiraA@vidade
packagecom.aula5;

importandroid.app.Ac@vity;
importandroid.os.Bundle;

publicclassSudokuextendsAc@vity{
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
main.xml

OLayoutPrincipal
<?xmlversion="1.0"encoding="u/8"?>
<LinearLayoutxmlns:android="h5p://schemas.android.com/apk/res/android"
android:orienta@on="ver?cal"android:layout_width="ll_parent"
android:layout_height="ll_parent">
<TextViewandroid:layout_width="ll_parent"
android:layout_height="wrap_content"
android:text="@string/main_?tle"/>
<Bu1onandroid:layout_width="ll_parent"
android:layout_height="wrap_content"
android:text="@string/con?nue_label"/>
<Bu1onandroid:layout_width="ll_parent"
android:layout_height="wrap_content"
android:text="@string/new_game_label"/>
<Bu1onandroid:layout_width="ll_parent"
ue
android:layout_height="wrap_content"
Voc conseg r a
android:text="@string/about_label"/>
e r c o m o s e
<Bu1onandroid:layout_width="ll_parent" prev
p r i nc i pa l de
android:layout_height="wrap_content" tel a
a a p l ic a o?
android:text="@string/exit_label"/> noss
</LinearLayout>
main.xml

OLayoutPrincipal
<?xmlversion="1.0"encoding="u/8"?>
<LinearLayoutxmlns:android="h5p://schemas.android.com/apk/res/android"
android:orienta@on="ver?cal"android:layout_width="ll_parent"
android:layout_height="ll_parent">
<TextViewandroid:layout_width="ll_parent"
android:layout_height="wrap_content"
android:text="@string/main_?tle"/>
<Bu1onandroid:layout_width="ll_parent"
android:layout_height="wrap_content"
android:text="@string/con?nue_label"/>
<Bu1onandroid:layout_width="ll_parent"
android:layout_height="wrap_content"
android:text="@string/new_game_label"/>
<Bu1onandroid:layout_width="ll_parent"
android:layout_height="wrap_content"
android:text="@string/about_label"/>
<Bu1onandroid:layout_width="ll_parent"
android:layout_height="wrap_content"
android:text="@string/exit_label"/>
</LinearLayout>
main.xml

OLayoutPrincipal
<?xmlversion="1.0"encoding="u/8"?>
<LinearLayoutxmlns:android="h5p://schemas.android.com/apk/res/android"
android:orienta@on="ver?cal"android:layout_width="ll_parent"
android:layout_height="ll_parent">
<TextViewandroid:layout_width="ll_parent"
android:layout_height="wrap_content"
android:text="@string/main_?tle"/>
<Bu1onandroid:layout_width="ll_parent"
android:layout_height="wrap_content"
android:text="@string/con?nue_label"/>
<Bu1onandroid:layout_width="ll_parent"
android:layout_height="wrap_content"
android:text="@string/new_game_label"/>
<Bu1onandroid:layout_width="ll_parent"
android:layout_height="wrap_content"
android:text="@string/about_label"/>
r
<Bu1onandroid:layout_width="ll_parent" Como muda
android:layout_height="wrap_content" a cor de
android:text="@string/exit_label"/> fundo?
</LinearLayout>
values/colors.xml

Corestambmsorecursos
<?xmlversion="1.0"encoding="uf8"?>
<resources>
<colorname="background">#3500</color>
</resources>

<LinearLayoutxmlns:android=
"h5p://schemas.android.com/apk/res/android"
android:background="@color/background"
android:orienta@on="ver?cal"
android:layout_width="ll_parent"
android:layout_height="ll_parent">

</LinearLayout>
main.xml

Margens
<?xmlversion="1.0"encoding="u/8"?>
<LinearLayoutxmlns:android=h5p://schemas.android.com/apk/res/android
android:background="@color/background"
android:orienta@on="ver?cal"android:layout_width="ll_parent"
android:layout_height="ll_parent">
.
</LinearLayout>

nar
Como adicio tre
a r g e m e n
uma m
o
os botes e la?
t r o d a t e
perme
main.xml

Alinhamento
<?xmlversion="1.0"encoding="uf8"?>
<LinearLayoutxmlns:android=hlp://schemas.android.com/apk/res/android
android:background="@color/background"
android:orienta@on="ver@cal
android:layout_width="ll_parent"
android:layout_height="ll_parent
android:padding="30dip">
.
</LinearLayout>

O que so
dips?

Como centralizar
r
Isto vai da os botes
mais verticalmente?

trabalho
main.xml

FormataodeFonte
<?xmlversion="1.0"encoding="uf8"?>
<LinearLayoutxmlns:android="hlp://schemas.android.com/apk/res/android"
android:background="@color/background"android:orienta;on="horizontal"
android:layout_width="ll_parent"android:layout_height="ll_parent"
android:padding="30dip">
<LinearLayoutandroid:orienta;on="ver;cal"
android:layout_height="wrap_content"
android:layout_width="ll_parent"
android:layout_gravity="center">
<TextView.../>
<Bulon.../>
<Bulon.../>
<Bulon.../> No d para
<Bulon.../> aumentar o
</LinearLayout> tamanho do ttulo
</LinearLayout> no?
main.xml

InferfaceFinal
<?xmlversion="1.0"encoding="uf8"?>
<LinearLayout>
<LinearLayout>
<TextView
android:layout_width="ll_parent
android:layout_height="wrap_content
android:text="@string/main_?tle
android:layout_marginBo1om="25dip
android:textSize="24.5sp"/>
<Bulon.../>
<Bulon.../>
<Bulon.../>
O que
<Bulon.../>
</LinearLayout> sp?
</LinearLayout>
UnidadesdeMedida
px(pixels):pontosnatela.
in(polegadas):tamanhoreal(medidoporrgua).
mm(milmetros):tamanhoreal.
pt(pontos):1/72deumapolegada.
dp(densityindependentpixels):emumatelacom
160pontosporpolegada,1dp=1px.Seforem
320pontos,ento1dp=2px,etc.
sp(scaleindependentpixels):mesmoquedp,
pormajustvelaotamanhodafonte.
<?xmlversion="1.0"encoding="uf8"?>
<LinearLayoutxmlns:android="hlp://schemas.android.com/apk/res/android"
ExemplodeEscalas
android:layout_width="ll_parent"
android:layout_height="ll_parent"
android:orienta@on="ver@cal">
<TextView <TextView
android:id="@+id/textView1" android:id="@+id/TextView01"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="5sp" android:padding="5sp"
android:text="160dp" android:text="160sp"
android:textSize="22sp"> android:textSize="22sp">
</TextView> </TextView>
<View <View
android:id="@+id/view1" android:id="@+id/View04"
android:layout_width="160dp" android:layout_width="160sp"
android:layout_height="20dip" android:layout_height="20dip"
android:layout_marginLew="20sp" android:layout_marginLew="20sp"
android:background="#FF22FF22"> android:background="#FF22FF22">
</View> </View>
<TextView <TextView
android:id="@+id/textView2" android:id="@+id/TextView02"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="5sp" android:padding="5sp"
android:text="72pt" android:text="160px"
android:textSize="22sp"> android:textSize="22sp">
</TextView> </TextView>
<View <View
android:id="@+id/view2" android:id="@+id/View03"
android:layout_width="72pt" android:layout_width="160px"
android:layout_height="20dip" android:layout_height="20dip"
android:layout_marginLew="20sp" android:layout_marginLew="20sp"
android:background="#FF22FF22"> android:background="#FF22FF22">
</View> </View>
<TextView <TextView
android:id="@+id/textView3" android:id="@+id/textView4"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="5sp" android:padding="5sp"
android:text="1in" android:text="25.4mm"
android:textSize="22sp"> android:textSize="22sp">
</TextView> </TextView>
<View <View
android:id="@+id/View01" android:id="@+id/View02"
android:layout_width="1in" android:layout_width="25.4mm"
android:layout_height="20dip" android:layout_height="20dip"
android:layout_marginLew="20sp" android:layout_marginLew="20sp"
android:background="#FF22FF22"> android:background="#FF22FF22">
</View </View>
</LinearLayout>
LayoutdePaisagem
Muitossmartphonespossuemumlayoutpara
omododepaisagem,chamadoquando
viramosoaparelhos.
Nossolayoutdepaisagemcouassim:

Qualoproblema
desselayout?
Ecomoresolvlo?
LayoutdePaisagem
possveldenirumlayoutdepaisagem
editandooarquivores/layout-land/
main.xml.
Comocriarolayoutabaixo?
layoutland/main.xml E se eu
Tabelas removesse esse
pedacinho de
<?xmlversion="1.0"encoding="u/8"?>
<LinearLayout texto aqui?
xmlns:android="h5p://schemas.android.com/apk/res/android"
android:background="@color/background" <TableLayout
android:layout_height="ll_parent"
android:layout_width="ll_parent" android:layout_height="wrap_content"
android:padding="15dip"
android:orienta@on="horizontal"> android:layout_width="wrap_content"
<LinearLayout
android:orienta@on="ver?cal" android:layout_gravity="center"
android:layout_height="wrap_content"
android:layout_width="ll_parent" android:stretchColumns="*">
android:layout_gravity="center"
android:paddingLew="20dip" <TableRow>
android:paddingRight="20dip">
<TextView <Bulon
android:text="@string/main_?tle"
android:layout_height="wrap_content" android:id="@+id/con?nue_bu5on"
android:layout_width="wrap_content"
android:layout_gravity="center" android:text="@string/con?nue_label"/>
android:layout_marginBolom="20dip"
android:textSize="24.5sp"/> <Bulon
<TableLayout
android:layout_height="wrap_content" android:id="@+id/new_bu5on"
android:layout_width="wrap_content"
android:layout_gravity="center" android:text="@string/new_game_label"/>
android:stretchColumns="*">
<TableRow> </TableRow>
<Bu1on
android:id="@+id/conFnue_buGon" <TableRow>
android:text="@string/conFnue_label"/>
<Bu1on <Bulon
android:id="@+id/new_buGon"
android:text="@string/new_game_label"/> android:id="@+id/about_bu5on"
</TableRow>
<TableRow> android:text="@string/about_label"/>
<Bu1on
android:id="@+id/about_buGon" <Bulon
android:text="@string/about_label"/>
<Bu1on android:id="@+id/exit_bu5on"
android:id="@+id/exit_buGon"
android:text="@string/exit_label"/> android:text="@string/exit_label"/>
</TableRow>
</TableLayout> </TableRow>
</LinearLayout>
</LinearLayout> </TableLayout>
Nocatolegal
layoutland/main.xml
Espaamento
<?xmlversion="1.0"encoding="u/8"?>
<LinearLayout
xmlns:android="h5p://schemas.android.com/apk/res/android"
android:background="@color/background"
android:layout_height="ll_parent"
android:layout_width="ll_parent"
android:padding="15dip"
android:orienta@on="horizontal">

ria a
<LinearLayout
android:orienta@on="ver?cal"
o fi ca
android:layout_height="wrap_content"
Com s e eu
android:layout_width="ll_parent"
o
aplica
android:layout_gravity="center"

os
android:paddingLeL="20dip"
android:paddingRight="20dip">
v e s s e
remo
<TextView

s de
android:text="@string/main_?tle"
android:layout_height="wrap_content"
a n d o
android:layout_width="wrap_content"
com n to?
e
android:layout_gravity="center"
m
espaa
android:layout_marginBolom="20dip"
android:textSize="24.5sp"/>
<TableLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:stretchColumns="*">
<TableRow>
<Bulon
android:id="@+id/con?nue_bu5on"
android:text="@string/con?nue_label"/>
<Bulon
android:id="@+id/new_bu5on"
android:text="@string/new_game_label"/>
</TableRow>
<TableRow>
<Bulon
android:id="@+id/about_bu5on"
android:text="@string/about_label"/>
<Bulon
android:id="@+id/exit_bu5on"
android:text="@string/exit_label"/>
</TableRow>
</TableLayout>
</LinearLayout>
</LinearLayout>
Tambmnocariamuitolegal
<?xmlversion="1.0"encoding="u/8"?>
<LinearLayout
xmlns:android="h5p://schemas.android.com/apk/res/android"
android:background="@color/background"
android:layout_height="ll_parent"
android:layout_width="ll_parent"
android:orienta@on="horizontal">
<LinearLayout
android:orienta@on="ver?cal"
android:layout_height="wrap_content"
android:layout_width="ll_parent"
android:layout_gravity="center>
<TextView
android:text="@string/main_?tle"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:layout_marginBolom="20dip"
android:textSize="24.5sp"/>
<TableLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:stretchColumns="*">
<TableRow>
<Bulon
android:id="@+id/con?nue_bu5on"
android:text="@string/con?nue_label"/>
<Bulon
android:id="@+id/new_bu5on"
android:text="@string/new_game_label"/>
</TableRow>
<TableRow>
<Bulon
android:id="@+id/about_bu5on"
android:text="@string/about_label"/>
<Bulon
android:id="@+id/exit_bu5on"
android:text="@string/exit_label"/>
</TableRow>
</TableLayout>
</LinearLayout>
</LinearLayout>

layoutland/main.xml
BotoAbout
Oquepoderamosfazercomobotoabout?
Outrasaplicaespossuemumafuncionalidade
assim?
Comoimplementla?
About.java

Ac@vityAbout
Como o cdigo
import android.app.Activity; do layout de
import android.os.Bundle;
nossa atividade?
public class About extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about);
}
}
about.xml

UmLayoutparaAbout
<?xmlversion="1.0"encoding="u/8"?>
<ScrollViewxmlns:android="h5p://schemas.android.com/apk/res/android"
android:layout_width="ll_parent"
android:layout_height="ll_parent"
android:padding="10dip">

<TextView
q u e s erve
android:id="@+id/about_content" Para de
android:layout_width="wrap_content" e t i p o
ess
android:layout_height="wrap_content"
android:text="@string/about_text"/> layout?

</ScrollView>
about.xml

UmLayoutparaAbout
<?xmlversion="1.0"encoding="u/8"?>
<ScrollViewxmlns:android="h5p://schemas.android.com/apk/res/android"
android:layout_width="ll_parent"
android:layout_height="ll_parent"
android:padding="10dip">

<TextView
android:id="@+id/about_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/about_text"/>

</ScrollView>
n d e fic ao
Mas o
e
texto qu s na
e i x a r emo
d

janela?
strings.xml

strings.xml Certo mas ainda


falta integrar essa
<?xmlversion="1.0"encoding="u/8"?>
<resources>
nova atividade com
<stringname="app_name">Sudoku</string> o boto About.
<stringname="main_?tle">AndroidSudoku</string>
<stringname="con?nue_label">Con?nue</string>
<stringname="new_game_label">NewGame</string>
<stringname="about_label">About</string>
<stringname="exit_label">Exit</string>
<stringname="about_?tle">AboutAndroidSudoku</string>
<stringname="about_text">\
Sudokuisalogicbasednumberplacementpuzzle.
Star;ngwithapar;allycompleted9x9grid,the
objec;veistollthegridsothateach o a a t i v i dade
Com
row,eachcolumn,andeachofthe3x3boxes
b o ut d e v e ser
(alsocalled<i>blocks</i>)containsthedigits A

1to9exactlyonce. invocada?
</string>
</resources>
manifest.xml

OManifesto
Paraadicionarseumanovaa@vidade,
precisomodicaroarquivomanifest.xml.

<ac@vityandroid:name=".About"android:label="@string/about_?tle">
<intentlter>
<ac@onandroid:name="android.intent.ac?on.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intentlter>
</ac@vity>
a , o q u e
Agor ara
c i s o p
pre tar a
e m e n
impl A b o ut?
d e
ativida
Sudoku.java

RelacionamentoentreA@vidades
Umaa@vidadepodeinvocaroutra,viaobjetos
chamadosIntenes(Intents).
publicvoidonCreate(BundlesavedInstanceState){ Pergunta repetida:
super.onCreate(savedInstanceState); como se d a
setContentView(R.layout.main);
ViewaboutBulon=ndViewById(R.id.about_bu5on); amarrao entre
aboutBulon.setOnClickListener(this); boto e evento?
}
publicvoidonClick(Viewv){
switch(v.getId()){
caseR.id.about_bu5on:
Intenti=newIntent(this,About.class);
startAc@vity(i);
break;
} Lembrese:
} publicclassSudokuextendsAc@vityimplementsOnClickListener
DevoltaaoManifesto
Seaa@vidadenoexis@rporsimesma,eno
quisermosexportlaparaoutrasaplicaes,
entopodemossimplicaromanifesto:
<ac;vityandroid:name=".About"android:label="@string/app_name">
<intentlter>
<ac;onandroid:name="android.intent.acFon.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intentlter>
</ac;vity>

<ac;vity
android:name=".About"
android:label="@string/about_Ftle">
</ac;vity>
CaixadeDilogo
Seriamaisinteressantequea
a@vidadeAboutfosse
mostradacomoumacaixade
dilogo.
Comopodemosmodicar
nossaaplicaopara
obtermosessacaixade
dilogo?
Temas
Androidpermitequedesenvolvedorescriem
Temas.
?
TemassocomoarquivosdeformatoCSS.
Jexistemalgunstemasprontos.

<ac@vity
android:name=".About"
android:label="@string/about_?tle"
android:theme="@android:style/Theme.Dialog">
</ac@vity>

?
AdicionandoConguraes
Menu de preferncias:
Adicione um menu sua
aplicao, de tal forma que o
usurio possa configurar o
ambiente de jogo.
O usurio deveria ser capaz
de escutar msica enquanto
brinca.
E ele poderia pedir dicas para
a aplicao.
Essas opes podem ser
configuradas via um menu
que dispara a atividade de
configurao
string.xml

string.xml
Vamoscriaralgumasstringsquenosauxiliaro
naconstruodomenu:
<stringname="se_ngs_label">Conguraes...</string>
<stringname="se_ngs_?tle">PrefernciasdoSudoku</string>
<stringname="se_ngs_shortcut">s</string>
<stringname="music_?tle">Msica</string>
<stringname="music_summary">Tocarmsicadefundo</string>
<stringname="hints_?tle">Dicas</string>
<stringname="hints_summary">Mostrardicasduranteojogo</string>

Novamente: por que Tudo bem, mas vocs


criar strings em lembram como
strings.xml? Quais inserir o menu em
strings devem ficar l? nossa aplicao?
OLayoutdoMenu
Oambientede
desenvolvimento
Androiddeneuma
pastamenu,emque
denidoolayoutdo
menudaaplicao.
menu/menu.xml

OLayoutdoMenu
<?xmlversion="1.0"encoding="uf8"?>
<menuxmlns:android="hlp://schemas.android.com/apk/res/android">
<item
android:id="@+id/se~ngs"
android:@tle="@string/se~ngs_label"
android:alphabe@cShortcut="@string/se~ngs_shortcut"/>
</menu>

<?xmlversion="1.0"encoding="uf8"?>
<menuxmlns:android=
"hlp://schemas.android.com/apk/res/android">
<item
android:id="@+id/se~ngs Ser que
android:@tle="Conguraes" Isso daria
android:alphabe@cShortcut="s"/> certo?
</menu>
Sudoku.java

A@vandooMenu
@Override
publicbooleanonCreateOp@onsMenu(Menumenu){
super.onCreateOp@onsMenu(menu);
MenuInaterinater=getMenuInater();
inater.inate(R.menu.menu,menu); Com
o
returntrue; ser o deveria
l
} Pref ayout de
s?
@Override
publicbooleanonOp@onsItemSelected(MenuItemitem){
switch(item.getItemId()){
caseR.id.se_ngs: E como deveria ser
startAc;vity(newIntent(this,Prefs.class)); essa atividade Prefs,
returntrue; que modifica as
} preferncais do
returnfalse; usurio?
}
ACaixadePreferncias
Podemosusarbotesdevericao!

s co mo
Ma e n tar
m
imple out?
se l ay
es
se~ngs.xml

CaixadePreferncias
<?xmlversion="1.0"encoding="u/8"?>
<PreferenceScreenxmlns:android="h5p://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="music"
android:@tle="@string/music_?tle"
android:summary="@string/music_summary"
android:defaultValue="true"/>
<CheckBoxPreference
android:key="hints"
android:@tle="@string/hints_?tle"
android:summary="@string/hints_summary"
android:defaultValue="true"/>
</PreferenceScreen>
E a implemen-
tao da ativi-
dade em si?
Prefs.java

AA@vidadePrefs
importandroid.os.Bundle;
importandroid.preference.PreferenceAc@vity;

publicclassPrefsextendsPreferenceAc@vity{
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.se_ngs);
}
}
E o que est
faltando para
O que esse
usarmos a
mtodo aqui?
atividade?
AdicionaraA@vidadeaoManifesto
Seria legal um
<ac@vity pouco de msica
android:name=".Prefs" no?
android:label="@string/se~ngs_@tle"> Bom, isso fica para
</ac@vity> um prximo
captulo.

Nveis de Dificuldade: Por hor


a,
nos pre vamos
Quando o usurio clicar em ocupar
com o b
new game, ele dever ot
new ga o
receber um menu de me
contexto, com trs opes de
dificuldade: fcil, mdio e Por onde ?
difcil. m e a mos
co
RegistrandoumEvento
Precisamosdeumiden@cadorparao
main.xml botoquecomearojogo:
<Bulonandroid:id="@+id/new_buGon"android:layout_width="ll_parent"
android:layout_height="wrap_content"android:text="@string/new_game_label"/>

Eprecisamosdeumescutadordeeventos
Sudoku.java paraonovoboto:
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);

ViewnewBu1on=ndViewById(R.id.new_bu1on);
newBu1on.setOnClickListener(this);
}
NveisdeDiculdade
publicvoidonClick(Viewv){ Sudoku.java
switch(v.getId()){

caseR.id.new_bulon:
openNewGameDialog();
break;
}
}
privatevoidopenNewGameDialog(){
newAlertDialog.Builder(this)
.setTitle(R.string.new_game_;tle).setItems(
R.array.diculty,newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialoginterface,inti){
startGame(i);
Existem alguns
E h tambm
}
}).show(); recursos que m a p o r o de
} u
precisamos
privatevoidstartGame(inti){ coisas
.
misteriosas
Log.d(TAG,"clickedon"+i); definir.
}
MaisStrings
strings.xml
<stringname="new_game_@tle">Diculdade</string>
<stringname="easy_label">Fcil</string>
<stringname="medium_label">Mdio</string>
<stringname="hard_label">Dicil</string>

Eumarranjo:
values/array.xml
<?xmlversion="1.0"encoding="uf8"?>
<resources>
<arrayname="diculty">
<item>@string/easy_label</item>
<item>@string/medium_label</item>
<item>@string/hard_label</item>
</array>
</resources>
Sudoku.java ConsoledeSada
publicvoidonClick(Viewv){
switch(v.getId()){
O que acontece
caseR.id.new_bulon: quando algum
openNewGameDialog();
break; clica no boto
} new game?
}
privatevoidopenNewGameDialog(){
newAlertDialog.Builder(this)
.setTitle(R.string.new_game_@tle).setItems(
R.array.diculty,newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialoginterface,inti){
startGame(i);
}
}).show();
}
privatevoidstartGame(inti){
Log.d("Sudoku","clickedon"+i);
}
ConsoledeSada
publicvoidonClick(Viewv){
switch(v.getId()){

caseR.id.new_bulon:
openNewGameDialog();
break;
}
}
privatevoidopenNewGameDialog(){
newAlertDialog.Builder(this)
.setTitle(R.string.new_game_@tle).setItems(
R.array.diculty,newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialoginterface,inti){
startGame(i);
}
}).show();
}
privatevoidstartGame(inti){
Log.d(Sudoku","clickedon"+i);
}
AindaoManifesto
<?xmlversion="1.0"encoding="u/8"?>
<manifestxmlns:android="h5p://schemas.android.com/apk/res/android"
package="com.aula5"android:versionCode="1"android:versionName="1.0">
<applica@onandroid:icon="@drawable/icon"android:label="@string/app_name">
<ac@vityandroid:name=".Sudoku"android:label="@string/app_name">
<intentlter>
<ac@onandroid:name="android.intent.ac?on.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intentlter>
</ac@vity>
<ac;vityandroid:name=".About"android:label="@string/about_Ftle"
android:theme="@android:style/Theme.Dialog"> O que aconte-
</ac;vity> ceria se apags-
<ac@vityandroid:name=".Prefs"android:label="@string/se_ngs_?tle">
</ac@vity>
semos a decla-
</applica@on> rao da ativi-
<usessdkandroid:minSdkVersion="2"/> dade no mani-
</manifest> festo?
UsandooConsole
Observaramosaseguinte
mensagemnoconsole:
android.content.ActivityNotFoundE
xception: Unable to find explicit
activity class {com.aula5/
com.aula5.About}; have you
declared this activity in your
AndroidManifest.xml?
PadrodeProjetosBuilder
publicvoidonClick(Viewv){
switch(v.getId()){

caseR.id.new_bulon:
openNewGameDialog();
break;
}
}
privatevoidopenNewGameDialog(){
newAlertDialog.Builder(this)
.setTitle(R.string.new_game_@tle).setItems(
R.array.diculty,newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialoginterface,inti){
startGame(i);
}
}).show();
O que o
} padro de
privatevoidstartGame(inti){ projetos
Log.d(TAG,"clickedon"+i); Builder?
}
PadrodeProjetosBuilder
Builderumaformadesepararo
cdigodeconstruodoobjeto
dalgicadoprograma.
Algunsobjetossoformadospor
vrioscomponentes,eanica
diferenaentreelesaforma
comoessescomponentesso
arranjados. newAlertDialog.Builder(this)
.setTitle(R.string.new_game_@tle).setItems(
R.array.diculty,newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialoginterface,inti){
startGame(i);
}
})
PadrodeProjetosBuilder
Como sair
do jogo?

Re@radodehlp://en.wikipedia.org/wiki/Builder_palern
TerminandooJogo
Implementeo
tratadordeeventos
queseriaa@vado
casoclicssemos
sobreobotoExit.

Na verdade, esse
boto no muito
necessrio.
Porque?
TerminandooJogo
E tendo
publicvoidonClick(Viewv){ terminado a
switch(v.getId()){ atividade, como
caseR.id.about_bulon: podemos comea-
Intenti=newIntent(this,About.class); la novamente?
startAc@vity(i);
break;
caseR.id.new_bulon:
openNewGameDialog();
break;
caseR.id.exit_bu1on:
nish();
break;
}
}
CarregandoA@vidades
Todasasa@vidadestestadasestodisponveis
emmododeemulao:

You might also like