Escolar Documentos
Profissional Documentos
Cultura Documentos
Fevereiro de 2011
Pr-requisitos
Programao Orientada a Objetos Java XML bsico Banco de Dados semi-bsico IDE - Eclipse Desejvel algum conhecimento sobre Web Services REST
Agenda da Aula 1
Introduo Conceitos bsicos Activity e Intent
Aplicaes e tarefas Ciclo de vida Passagem e retorno de parmetros
Interface grficas
Introduo
Suportado pelo Google Sistema Operacional Linux Mquina Virtual Dalvik Cdigo aberto e livre com boa documentao
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:
Android SDK Tools SDK Platform - API 7, 8 ou 9 Google API - API 7, 8 ou 9 Demais so opcionais ou instalados automaticamente
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
New > Other > Android > Android Project Preencha os campos conforme a prxima figura Clique em Finish No Package Explorer, clique com o boto direito sobre o novo projeto Selecione Run as > Android Aplication O emulador ser iniciado e aps alguns minutos a aplicao rodar apresentando o ttulo "Hello World.
10
Criao de projeto
Project Name
O nome do projeto que
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
Caso uma aplicao seja instalada com o mesmo nome de pacote de uma j existente no celular a anterior ser substituda.
12
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
14
AndroidManifest.xml
XML com as configuraes da aplicao
Nome, pacote e cone Classes de tela (Activity's) Verso mnima do SDK necessria Permisses (acessar Internet, efetuar ligaes, etc)
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 Info
Warning Error
fato Caso queira que os projetos sejam copiados para seu workspace, e no apenas referenciados, marque Copy projects into workspace Clique em Finish
compliance level > 1.6 Project > Clean... > Clean all projects > OK
Properties > Java Compiler > Desmarque Enable project specific settings > OK 2. Selecione o projeto > Clique com o boto direito > Properties > Android > Em Project Build Target marque a verso do Android a ser utilizada 3. Selecione o projeto > Clique com o boto direito > Android Tools > Fix Project Properties
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
Abre browser na pgina
ACTION_CALL
ACTION_DIAL ACTION_PICK
Contacts.CONTENT_URI
27
A activity chamadora deve implementar o mtodo onActivityResult(int requestCode, int resultCode, Intent data)
28
29
putExtra(String nome, int valor) putExtra(String nome, int [] valor) putExtra(String nome, float valor), etc putExtra(String nome, String valor) putExtra(String nome, Bundle bundle) putExtras(Bundle) putExtras(Intent)
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 px (pixels) in (polegadas) mm (milmetros) pt (pontos) Descrio Corresponde aos pixels reais da tela Baseado no tamanho fsico da tela Baseado no tamanho fsico da tela 1 pt = 1/72 in. Tambm baseado no tamanho fsico
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)
Semelhante ao dp/dip, mas tambm escalado pelo tamanho de fonte nas preferncias do usurio. Recomendvel para especificar tamanhos de fonte pois elas sero ajustadas tanto para densidade da tela quanto para as preferncias do usurios.
44
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
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
55
ProgressBar RatingBar
Toast Dialogs ProgressDialog Alertas
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
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
Selecionar horrio do dia (24h ou AM/PM) Aceita horas e minutos, mas no segundos Integer getCurrentHour(), getCurrentMinute() setIs24HourView(boolean), boolean is24HourView() setCurrentHour(Integer), setCurrentMinute(Integer) setOnTimeChangedListener(OnTimeChangedListener) Selecionar um data (dia, ms, ano) int getDayOfMonth(), getMonth(), getYear() init(ano, ms, dia, OnDateChangeListener) updateDate(ano, ms, dia)
DatePicker
72
ProgressBar
Exibe um indicador de progresso de uma operao Estilos como percentual ou indeterminado Estilos (atributo style no XML):
?android:progressBarStyle (padro) Indeterminado circular de tamanho mdio
?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" />
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() void setRating(float rating) Retorna quantidade de estrelas totais Retorna a classificao (nota) Retorna o tamanho de cada salto das notas Retorna true se for indicadora ou false se for interativa Determina a classificao
Estilos
?android:ratingBarStyle (default) Exibe estrelas grandes e permite alterao da classificao. Pode-se usar isIndicator=true para ser apenas um indicador. Exibe estrelas pequenas. Apenas indicador. Exibe estrelas mdias. Apenas indicador.
76
?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" />
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) Tenta mostrar o Dialog para o id chamando onCreateDialog() se necessrio, e em seguida onPrepareDialog(). Retorna true em caso de sucesso. Fecha o Dialog criado por showDialog() com o id especificado. Se nenhum Dialog com o id tiver sido mostrado lana IllegalArgumentException. Remove qualquer referncia para o Dialog especificado. Caso esteja sendo exibido, ele fechado antes.
Callback chamado quando um Dialog deve ser criado para o id especificado. Implementado pelo desenvolver.
Callback que permite que o Dialog seja preparado antes de ser apresentado. Por exemplo, configurar alguma varavel.
79
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) Determina o cone a ser mostrado Determina o ttulo do alerta Mensagem a ser mostrada no interior do alerta Texto do boto positivo (Sim, Yes, Ok, etc)
setNegativeButton(String, listener) setItems(String [], listener) setSingleChoiceItems(String [], int checkedItem, listener)
setCancelable(boolean) show() cancel()
Texto do boto negativo (No, No, etc) Items a serem mostrados para usurio selecionar Determina lista de RadioButtons a serem mostrados ao usurio
Alerta cancelvel ou no. Cancelvel significa que usurio no pode fechar com boto voltar. Exibe o alerta para o usurio 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();
CharSequence[] items = {"Red", "Green", "Blue"}; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Pick a color"); builder.setItems(items, new DialogInterface.OnClickListener() { ... } ); builder.show();
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; }
83
MenuItems
Representa um item selecionvel de menu Mtodos
setEnabled(boolean) setVisible(boolean) setTitle(int) setTitle(String) setIcon(int) setIcon(Drawable) int getItemId() Determina se o item selecionvel ou no Determina se o item visvel ou no Define o texto que aparece no item Define o cone que aparece no item Retorna o id do item conforme Menu.add()
Quando um item selecionado pelo usurio o mtodo boolean onOptionsItemSelected (MenuItem) chamado
Compare o id usando MenuItem.getItemId()
84
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()
Callback chamado quando um item da lista selecionado pelo usurio. A parmetro pos indica a posio do item na lista de item do adaptador.
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) Especifica o id da View que deve ser usada como o contedo da aba. Especifica a Intent que deve ser usada para iniciar uma activity que ser o contedo da aba. Especifica um TabHost.TabContentFactory que ser responsvel por criar o contedo da aba.
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