Escolar Documentos
Profissional Documentos
Cultura Documentos
Slides Aula Android Java
Slides Aula Android Java
Fevereiro de 2011
Pr-requisitos
Agenda da Aula 1
Introduo
Conceitos bsicos
Activity e Intent
Aplicaes e tarefas
Ciclo de vida
Passagem e retorno de parmetros
Interface grficas
Layouts
Views
Dialogs
Menus
3
Introduo
Android 1.5 - 3
Android 1.6 - 4
Android 2.1 - 7
Android 2.2 - 8
Android 2.3 - 9
4
Configurao do ambiente
Download e Instalao
Software Development Kit (SDK)
http://developer.android.com/sdk/index.html
Plataformas:
Pasta de instalao > SDK Manager
"Available Packages" e marque:
Configurao do ambiente
Android Virtual Devices (AVD)
Permite configurar um celular virtual
Verso do Android, Tamanho da tela e memria
Emulador
Programa que permite rodar um AVD no computador
Exerccio 1:
Criar um AVD usando SDK Manager
No SDK Manager: Virtual Devices > New
Preencher campos Name, Target e SD Card Size
(128MiB).
Criao do AVD
Configurao
Window > Preferentes > Android
Em "SDK Location" coloque o path do SDK
Exerccio 2:
Criar uma aplicao Hello World bsica com o Wizard
e rodar no emulador (no precisa programar).
Criao de projeto
10
Criao de projeto
Project Name
O nome do projeto que
aparecer no Package
Explorer do Eclipse.
Application Name
Nome que aparecer no menu
do Android.
Package Name
Nome nico do pacote que
identifica a aplicao.
Create Activity
O nome da classe que
Detalhes e dicas
No necessrio fechar o emulador aps testar a
aplicao
Para executar o mesmo projeto aps uma alterao no
necessrio fechar e reabrir o emulador, basta clicar
em Run.
O mesmo vale para outros projetos.
No entanto, em alguns poucos casos, pode ser preciso
Conceitos bsicos
Estrutura do Projeto
src
Classes da aplicao
gen
Classe R
Gerada automaticamente
res/drawable
Imagens em 3 resolues diferentes
res/layout
res/values
Internacionalizao de strings
Descrio de cores, estilos, etc
AndroidManifest.xml
A classe R
Atualizada automaticamente pelo ADT quando o
contedo da pasta res alterado
Tambm existe a classe android.R com alguns recursos
pr-definidos
Contm constantes que representam cada recurso
R.drawable.nome_imagem
R.layout.nome_layout
R.string.nome_string
R.color.red
R.dimen.espaco
R.array.nome_array
R.style.nome_estilo
14
AndroidManifest.xml
XML com as configuraes da aplicao
15
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.notification"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".MyActivity1"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MyActivity2" />
</application>
<uses-permission android:name="android.permission.VIBRATE" />
</manifest>
16
strings.xml
/res/values/values-en/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, HelloActivity!</string>
<string name="app_name">Hello World in Android</string>
</resources>
/res/values/values-pt/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Al Mundo, HelloActivity!</string>
<string name="app_name">Al Mundo no Android</string>
</resources>
17
LogCat
No existe System.out.println(), mas existe o LogCat
LogCat permite escrever mensagens no Log do
Android
Nveis de severidade
Verbose
Log.v(tag, message)
Debug
Log.d(tag, message)
Info
Log.i(tag, message)
Warning
Log.w(tag, message)
Error
Log.e(tag, message,exception)
fato
Caso queira que os projetos sejam copiados para seu
workspace, e no apenas referenciados, marque Copy
projects into workspace
Clique em Finish
Activity e Intent
Aplicao
Ao instalar associada a um usurio nico
Roda em seu processo separado
Classe View
Classe base para elementos de interface grfica
Classe Activity
Container de elemento grficos
Gerencia um ciclo de vida
Task (tarefa)
Pilha de Activity's
Pode haver activity`s de diferentes aplicaes
Classe Intent
Classe que descreve uma inteno em realizar uma ao
22
23
Ciclo de vida
Entire Lifetime
Fase entre o incio e o fim da activity
Compreende mtodos entre onCreate() e onDestroy()
Visible Lifetime
Activity iniciada e na pilha da tarefa interagindo com o
usurio ou no.
Compreende os mtodos (callbacks):
onStart(), onStop(), onRestart()
onPause(), onResume()
Foreground Lifetime
Activity visvel e em primeiro interagindo com o usurio
Callbacks:
onResume(), onPause()
24
Boto Back
Remove Activity do topo da pilha da tarefa
Caso a pilha fique vazia retorna para a tela inicial
Exerccio 3
Ciclo de vida: 03-ActivityLifeCycle
25
Criao da Intent
Na mesma aplicao: new Intent(context, class)
context - instncia da Activity chamadora
class - <activity a ser iniciada>.class
Nativas do sistema Android: new Intent(action, uri)
action - uma das aes possiveis
uri - identificador de recurso
De outra aplicao: Intent.setComponent(...)
26
Descrio
ACTION_VIEW
http://www.gmail.com
Abre browser na
pgina
ACTION_VIEW
content://com.android.contacts/contacts/1
Mostra contato
solicitado
ACTION_VIEW
geo:0,0?q=Presidente+Vargas,Rio+de+Janeiro
Busca no Google
Maps
ACTION_CALL
tel:12345678
ACTION_DIAL
tel:12345678
Apenas disca o
nmero
ACTION_PICK
Contacts.CONTENT_URI
27
29
Classe Bundle
mapa de pares chave-valor
30
31
32
Retornando dados
Intent intent = new Intent();
intent.putExtra("chave", "valor");
setResult(RESULT_OK, intent);
finish();
33
Encerramento da aplicao
Quando a ltima Activity da pilha (Task) da aplicao
34
35
Interfaces grficas
Viso geral
Classe View
A classe para componentes visuais
Desenha na tela atravs do mtodo onDraw(Canvas)
Widgets
Componentes visuais simples
Subclasses de View
TextView, EditText, ImageView, ProgressBar, etc
Activity's especializadas
ListActivity, TabActivity, MapActivity
36
37
Identificadores:
Definio: android:id="@+id/identificador"
Referncia: android:layout_below="@id/identificador"
Strings:
android:text="@string/nome_string"
Cores:
Forma direta: android:textColor="#RRGGBB"
Forma indireat: android:textColor="@color/nome_cor"
Estilos:
style="@style/nome_estilo
38
Atributos
39
Atributos
40
Atributos
41
Atributos
42
Atributos
43
Dimenses
Dimenso
Descrio
px (pixels)
in (polegadas)
mm (milmetros)
pt (pontos)
dp/dip
Unidade abstrata baseada na densidade fsica da tela, onde 160 dp =
(Density-independent Pixels) 1 in = 25.4 mm. Mantm sempre o mesmo tamanho real,
independente da densidade. Exemplo: 0.5 in = 12.7 mm = 80 dp.
Em 160 dpi, 80 dp = 80 px, j em 240 dpi, 80 dp = 120 px.
Para fazer converso entre pixels e dps use o seguinte cdigo:
DisplayMetrics metrics =
getResources().getDisplayMetrics();
pixels = dps * (metrics.densityDpi / 160.0);
sp
(Scale-independent Pixels)
45
ListView
Permite rolar contedo verticalmente e selecionar
Interface ListAdapter
Faz a ligao entre ListView e seus elementos
Implementado pela classe ArrayAdapter <T>
new ArrayAdapter<String>(contexto, itemResId, items);
itemResId pode ser android.R.layout.simple_list_item_1
items = array de Ts, neste caso Strings
Atributos
46
ListView
Maneira simplificada de uso:
Coloque um elemento <ListView> com id no XML de layout
Crie um array de elementos de um tipo T
Obtenha o objeto ListView usando Activity.findViewById(id)
Crie um ArrayAdapter passando o array de Ts
Adicione o ArrayAdapter ao ListView usando ListView.setAdapter(..)
Implemente o mtodo onItemClick(...) de OnItemClickListener
Passe a instncia da classe que implementa onItemClick para
ListView.setOnItemClickListener(...)
Parmetros de OnItemClickListener.onItemClick(...)
AdapterView <?> parent - referncia para o ListView
View view - a View dentro de parent que foi clicada
int position - a posio da View no ArrayAdapter, i.e., o ndice do
array
int id - o id do elemento, neste caso ser igual a position
47
GridView
Exibe Views na forma de grade
Todas as colunas tm a mesma largura
Faz scrolling do contedo
Atributos
Exerccio 9
http://developer.android.com/resources/tutorials/views/hello-gridview.html
48
WebView e WebSettings
WebView
Apresenta uma pgina de web
Usa o mesmo componente que o navegador do celular
Necessrio permisso android.permission.INTERNET
WebSettings
Permite configurar o WebView
Permite JavaScript, Salvar senhas, etc.
Mtodos principais
49
Gallery e ImageSwitcher
Gallery
Mostra lista de componentes com rolagem horizontal
Mantm o componente selecionado sempre no centro
ImageSwitcher
Exibe imagens e cria efeitos ao altern-las
50
Strings
Cores
Dimenses
Array
listas de inteiros, strings, ou recursos
Estilos
definir atributos de cada View uma nica vez
Temas
aplicao de estilos a toda activity ou aplicao
51
No cdigo Java
int id = R.array.planets;
TypedArray da = res.obtainTypedArray(id);
Drawable dw0 = array.getDrawable(0);
Drawable dw1 = array.getDrawable(1);
53
Temas
<style name="nome_estilo"
parent="android:style/Theme.Black">
<item name="android:textSize">14sp</item>
<item name="android:background">@color/branco</item>
...
</style>
<application
... android:theme="@android:style/Theme.Back">
<activity ... android:theme="@android:style/Theme.Back">
<application ... android:theme="@style/nome_estilo">
<activity ... android:theme="@style/nome_estilo">
54
/res/values/recurso.xml
<color name="branco">#FFFFFF</color>
<style name="nome_estilo" parent="android:style/Theme.Black">
<item name="android:textSize">14sp</item>
<item name="android:background">@color/branco</item>
...
</style>
<dimen name="spacing">80dip</dimen>
<drawable name="gray">#888888</drawable>
</resources>
55
View
TextView
EditText
AutoCompleteTextView
Button
ImageButton
CheckBox
ToggleButton
RadioButton e RadioGroup
Spinner (combo)
AnalogClock
DigitalClock
Chronometer
DatePicker
TimePicker
ProgressBar
RatingBar
Toast
Dialogs
ProgressDialog
Alertas
Menus e Submenus
LayoutInflater
TabActivity e TabWidget
ListView e ListActivity
56
57
android:text="@string/..."
android:textColor="@color/..."
android:password="true | false"
android:numeric="integer | signed | decimal"
android:singleLine="true | false"
android:lines - quantas linhas de texto de altura
AutoCompleteTextView
android:completionThreshold="3" - quantidade de caracteres
digitados antes aparecer sugestes
setAdapter(ArrayAdapter) - definir lista de opes
58
TextView's Exerccio 12
Crie um projeto chamado TesteViews
Crie /res/layout/texts.xml
Crie TextView, EditText e
AutoCompleteTextView
EditText - aceita um nmero indicando
quantos caracteres disparam as
sugestes
AutoCompleteTextView com completionThreshold="1"
Crie /res/values/arrays.xml
Crie um array de nomes iniciando por letras parecidas
AutoCompleteTextView.setThreashold(int)
59
Button e ImageButton
Permitem criar botes clicveis na tela
Button - subclasse de TextView
ImageButton - subclasse de ImageView
Setando imagem via Java e XML
imageButton.setImageResource(R.drawable.image_id)
button.setCompoundDrawablesWithIntrinsicBounds(left,top,right,bottom)
<ImageButton android:src="@drawable/..." ... />
<Button android:drawableLeft="@drawable/..."
android:drawableTop="..."
android:drawableRight="..." android:drawableBottom="..." ... />
Detectando clique:
final Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
}
});
60
CheckBox e ToggleButton
Boto de dois estados, que
permite marcar um item na tela
CheckBox
android:text="@string/..."
ToggleButton
android:textOn="@string/..."
android:textOff="@string/..."
Mtodos
boolean isChecked() - retorna estado
void toggle() - alterna estado
void setChecked(boolean) - define estado
boolen performClick() - simula click chamando o mtodo
onClick(..) do OnClickListener associado
61
RadioButton e RadioGroup
RadioButton
Permite selecionar apenas um item dentro da lista de
um RadioGroup
Exemplo
<RadioGroup android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/group1">
<RadioButton android:id="@+id/radioSim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sim"
android:checked="false" />
<RadioButton android:id="@+id/radioNao"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No"
android:checked="false"/>
</RadioGroup>
62
RadioButton e RadioGroup
Pegar id do RadioButton selecionado
RadioGroup.getCheckedRadioButtonId()
Ou usar o callback onCheckedChanged(...)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.radiobutton);
final RadioGroup group = (RadioGroup) findViewById(R.id.group1);
group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
// Note que: checkedId == group.getCheckedRadioButtonId()
boolean sim = R.id.radioSim == checkedId;
boolean nao = R.id.radioNao == checkedId;
if (sim) {
//
} else if (nao) {
//
}
}
});
}
63
Spinner (combo)
Exibe um componente com texto que ao ser clicado
expande um lista de opes
Exemplo /res/layout/spinner.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Spinner android:id="@+id/comboPlanetas"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:prompt="Planetas" />
<ImageView android:id="@+id/img"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
64
Spinner (combo)
Exemplo SpinnerActivity.java (trechos)
Definir a lista de opes e seus layouts
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.spinner_textview,
getResources().getStringArray(R.array.planetNames));
adapter.setDropDownViewResource(R.layout.simple_textview);
Spinner spinner = (Spinner) findViewById(R.id.comboPlanetas);
spinner.setAdapter(adapter);
});
65
Spinner (combo)
Exemplo dos layouts adicionais
/res/layout/spinner_textview.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:textColor="@color/vermelho"
android:padding="2px"
android:textSize="18sp" />
/res/layout/simple_textview.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/azul"
android:textColor="@color/branco"
android:padding="10px"
android:textSize="20sp" />
66
Spinner (combo)
Spinner (combo)
Outros mtodos
Object getSelectedItem()
retorna o item selecionado
long getSelectedItemId()
retorna o id do item selecionado
int getSelectedItemPosition()
retorna a posio do item selecionado no array fornecido para
ArrayAdapter
void setPrompt(String)
determina o prompt da lista de opes
68
Clock e Chronometer
AnalogClock e DigitalClock
Exibem um relgio digital ou analgico com a hora atual
Chronometer
Exibe um contador de tempo
setBase(long time)
Define o instante de tempo que o cronometro marca zero
Usar SystemClock.elapsedRealtime()
start(), stop()
Disparar ou interromper contagem
setOnChronometerTickListener(Chronometer.OnChron
ometerTickListener)
Chamado pelo cronmetro quando seu contador muda
69
</LinearLayout>
70
71
DatePicker
72
ProgressBar
Exibe um indicador de progresso de uma operao
Estilos como percentual ou indeterminado
Estilos (atributo style no XML):
?android:progressBarStyle
?android:progressBarStyleSmall
?android:progressBarStyleLarge
?android:progressBarStyleHorizontal
Mtodos
setProgress(int)
setSecondaryProgress(int)
boolean isIndeterminate()
ProgressBar - Exemplo
<ProgressBar style="?android:progressBarStyleSmall"
android:layout_width="wrap_content android:layout_height="wrap_content" />
<ProgressBar style="?android:progressBarStyle"
android:layout_width="wrap_content android:layout_height="wrap_content" />
<ProgressBar style="?android:progressBarStyleLarge"
android:layout_width="wrap_content android:layout_height="wrap_content" />
<ProgressBar style="?android:progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="true" />
<ProgressBar style="?android:progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="false"
android:progress="45" />
<ProgressBar style="?android:progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="false"
android:progress="45" android:secondaryProgress="80" />
75
RatingBar
Mostra uma barra de classificao com estrelas
A barra pode ser interativa ou apenas um indicator
Mtodos
int getNumStars()
float getRating()
float getStepSize()
boolean isIndicator()
Determina a classificao
Estilos
?android:ratingBarStyle
?android:ratingBarStyleSmall
?android:ratingBarStyleIndicator
RatingBar
<RatingBar style="?android:ratingBarStyle"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:numStars="5" android:stepSize=".5" android:rating="2.5" />
<RatingBar style="?android:ratingBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5" android:stepSize=".5"
android:rating="2.5" android:isIndicator="true" />
<RatingBar style="?android:ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="10" android:stepSize=".5"
android:rating="2.5" />
<RatingBar style="?android:ratingBarStyleIndicator"
android:layout_width="wrap_content
android:layout_height="wrap_content"
android:numStars="6" android:stepSize=".5" android:rating="2.5" />
77
Toast
Exibio de alertas por tempo determinado
Dialogs
Usado para abrir janelas na tela
Recomendado usar os mtodos a seguir para que a
Activity gerencie o ciclo de vida do Dialog.
boolean showDialog(int id, Bundle)
ProgressDialog
Janela para mostrar o progresso de uma operao
Como usar sem os mtodos anteriores
Mostrar o Dialog
dialog = ProgressDialog.show(contexto, titulo, msg, bool indet);
indet = se indeterminado ou no (percentual)
AlertDialog
Exibe um alerta ao usurio
Contedo e botes de escolha personalizados
Classe AlertDialog.Builder para construir alertas
setIcon(int resId)
setTitle(String)
setMessage(String)
setPositiveButton(String, listener)
setNegativeButton(String, listener)
setCancelable(boolean)
show()
cancel()
Cancela o alerta
81
AlertDialog - Exemplos
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to exit?");
builder.setCancelable(false);
builder.setPositiveButton("Yes", ...);
builder.setNegativeButton("No, ...);
AlertDialog alert = builder.create();
82
Menus e Submenus
possvel criar menus e um submenu para cada menu
So exibidos quando a tecla Menu apertada
Devem ser criados em Activity.onCreateOptionsMenu()
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuItem item = menu.add(0, NOVO, 0, Novo);
item = menu.add(0, ABRIR, 0, Abrir);
item = menu.add(0, SALVAR, 0, Salvar);
SubMenu submenu = menu.addSubMenu(Outros);
item = submenu.add(0, PESQUISAR, 0, Pesquisar);
item = submenu.add(0, LIMPAR, 0, Limpar);
item = submenu.add(0, SAIR, 0, Sair);
return true;
}
desenvolvedor
Retorne true para que o menu seja mostrado
83
MenuItems
Representa um item selecionvel de menu
Mtodos
setEnabled(boolean)
setVisible(boolean)
setTitle(int)
setTitle(String)
setIcon(int)
setIcon(Drawable)
int getItemId()
LayoutInflater
Constri hierarquia de uma View a partir de um layout
Exemplo
LayoutInflater inflater = (LayoutInflater)
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(resId, null);
// Agora possvel passar para um Toast e exibir na tela
Toast toast = new Toast(this);
toast.setView(view);
toast.setDuration(Toast.LENGTH_SHORT);
toast.show();
85
ListActivity
Cria uma activity que mostra uma lista de itens
Simplifica codificao Java
Evita criao de XML de layout
Apenas listas personalizadas precisariam
ListAdapter getListAdapter()
ListView getListView()
void onListItemClick(ListView,
View, int pos, long id)
86
TabActivity
Usada para criar telas com abas
Cada aba fica associada a uma activity ou view
Etapas de uso:
Herde de TabActivity
No mtodo onCreate()
Obtenha o objeto TabHost usando getTabHost()
Para cada aba a ser criada
Obtenha um objeto TabSpec chamando
TabHost.newTabSpec(String tag)
TabSpec.setIndicator() para definir o titulo e/ou imagem
TabSpec.setContent() para definir o contedo da aba
TabHost.addTab(TabSpec) para adicionar a aba
87
TabActivity
A classe TabSpec possui variantes em seus mtodos:
setContent(int viewId)
setContent(Intent)
setContent(TabContentFactory)
setIndicator(String)
setIndicator(View)
setIndicator(String, Drawable)
88
Intent filter
BroadcastReceiver, Services e Notification
AlarmManager e Handler
Banco de Dados e ContentProvider
Mapas e GPS
Sockets e Web Services
Projeto
89