Android

Curso de Android

Fevereiro de 2011

Cristiano Expedito Ribeiro Fabrício Firmino de Faria

Pré-requisitos
      Programação Orientada a Objetos Java XML básico Banco de Dados semi-básico IDE - Eclipse Desejável algum conhecimento sobre Web Services REST

2

Agenda da Aula 1
 Introdução  Conceitos básicos  Activity e Intent
 Aplicações e tarefas  Ciclo de vida  Passagem e retorno de parâmetros

 Interface gráficas
   

Layouts Views Dialogs Menus
3

Introdução
    Suportado pelo Google Sistema Operacional Linux Máquina Virtual Dalvik Código aberto e livre com boa documentação

 Plataformas, SDK e API Level
    

Android 1.5 - 3 Android 1.6 - 4 Android 2.1 - 7 Android 2.2 - 8 Android 2.3 - 9
4

8 ou 9 Google API .com/sdk/index.html  Plataformas: • Pasta de instalação > SDK Manager • "Available Packages" e marque: • • • • Android SDK Tools SDK Platform .Configuração do ambiente  Download e Instalação  Software Development Kit (SDK) • http://developer. 8 ou 9 Demais são opcionais ou instalados automaticamente 5 .API 7.android.API 7.

Download das plataformas 6 .

Tamanho da tela e memória  Emulador  Programa que permite rodar um AVD no computador  Exercício 1:  Criar um AVD usando SDK Manager • No SDK Manager: Virtual Devices > New • Preencher campos Name. Target e SD Card Size (128MiB).Configuração do ambiente  Android Virtual Devices (AVD)  Permite configurar um celular virtual  Versão do Android. 7 .

Criação do AVD 8 .

com/android/eclipse/  Configuração  Window > Preferentes > Android  Em "SDK Location" coloque o path do SDK  Exercício 2:  Criar uma aplicação Hello World básica com o Wizard e rodar no emulador (não precisa programar). 9 .Plugin para Eclipse (ADT)  Permite criação e execução de projetos Android  Instalação  No Eclipse: Help > Install New Software > Add  URL: https://dl-ssl.google.

clique com o botão direito sobre o novo projeto  Selecione Run as > Android Aplication  O emulador será iniciado e após alguns minutos a aplicação rodará apresentando o título "Hello World. 10 .Criação de projeto     New > Other > Android > Android Project Preencha os campos conforme a próxima figura Clique em Finish No Package Explorer.

Criação de projeto  Project Name  O nome do projeto que aparecerá no Package Explorer do Eclipse.  Application Name  Nome que aparecerá no menu do Android. 11 .  Package Name  Nome único do pacote que identifica a aplicação.  Create Activity  O nome da classe que representa a tela inicial da aplicação.

 O mesmo vale para outros projetos. basta clicar em Run. pode ser preciso  Caso uma aplicação seja instalada com o mesmo nome de pacote de uma já existente no celular a anterior será substituída. 12 .  No entanto.Detalhes e dicas  Não é necessário fechar o emulador após testar a aplicação  Para executar o mesmo projeto após uma alteração não é necessário fechar e reabrir o emulador. em alguns poucos casos.

xml .Conceitos básicos  Estrutura do Projeto  src • Classes da aplicação  gen • Classe R • Gerada automaticamente  res/drawable • Imagens em 3 resoluções diferentes  res/layout  res/values • Internacionalização de strings • Descrição de cores. estilos. etc  AndroidManifest.

R com alguns recursos pré-definidos  Contém constantes que representam cada recurso        R.color.nome_array R.nome_imagem R.nome_string R.string.nome_estilo 14 .layout.nome_layout R.espaco R.style.dimen.drawable.A classe R  Atualizada automaticamente pelo ADT quando o conteúdo da pasta res é alterado  Também existe a classe android.array.red R.

pacote e ícone Classes de tela (Activity's) Versão mínima do SDK necessária Permissões (acessar Internet. etc)  ADT fornece interface de edição 15 .xml  XML com as configurações da aplicação     Nome. efetuar ligações.AndroidManifest.

intent.category.notification" android:versionCode="1" android:versionName="1.MyActivity1" android:label="@string/app_name"> <intent-filter> <action android:name="android.MAIN" /> <category android:name="android.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.action.MyActivity2" /> </application> <uses-permission android:name="android.AndroidManifest.example.com/apk/res/android" package="com.VIBRATE" /> </manifest> 16 .xml <?xml version="1.intent.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".android.permission.

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 .0" encoding="utf-8"?> <resources> <string name="hello">Hello World.xml <?xml version="1. HelloActivity!</string> <string name="app_name">Hello World in Android</string> </resources>  /res/values/values-pt/strings.xml  /res/values/values-en/strings.strings.

message) Debug Info Warning Error Log. message.out. message) Log. message) Log.e(tag.println().exception)  Para ver no Eclipse:  Window > Show View > Other > Android > LogCat 18 . mas existe o LogCat  LogCat permite escrever mensagens no Log do Android  Níveis de severidade Verbose Log. message) Log.v(tag.LogCat  Não existe System.i(tag.w(tag.d(tag.

marque „Copy projects into workspace‟  Clique em Finish .  Escolha o diretório contendos os projetos a serem importados  Em projects...Importação de projetos no Eclipse  Muitas vezes pode ser necessário importar projetos criados e uma máquina para outra(s):  Menu File > Import.. marque os projetos a serem importados de fato  Caso queira que os projetos sejam copiados para seu workspace. > Existing Projects into Workspace > Next > Browser. e não apenas referenciados..

 Window > Preferences > Android > SDK Location  Window > Preferences > Java > Compiler > Compiler compliance level > 1..  Para resolver siga os passos a seguir. depois.6  Project > Clean. caso persistam em cada projeto com erros.Resolução de erros de importação  Após a importação o Eclipse pode relatar erros nos projetos. desde que não existam erros de compilação na máquina original  Primeiros deve-se tentar corrigir os erros globalmente.. > Clean all projects > OK .

.. Selecione o projeto > Clique com o botão direito > Properties > Android > Em „Project Build Target‟ marque a versão do Android a ser utilizada 3. Selecione o projeto > Clique com o botão direito > Properties > Java Compiler > Desmarque „Enable project specific settings‟ > OK 2.. > All projects > OK. Selecione o projeto > Clique com o botão direito > Android Tools > Fix Project Properties  Após as propriedades de todos os projetos terem sido corrigidas:  Project > Clean.Resolução por projeto  Para os projetos que ainda estiverem com erro: 1.

Activity e Intent  Aplicação  Ao instalar é associada a um usuário único  Roda em seu processo separado  Classe View  Classe base para elementos de interface gráfica  Classe Activity  Container de elemento gráficos  Gerencia um ciclo de vida  Task (tarefa)  Pilha de Activity's  Pode haver activity`s de diferentes aplicações  Classe Intent  Classe que descreve uma intenção em realizar uma ação 22 .

Ciclo de vida de uma Activity 23 .

Ciclo de vida
 Entire Lifetime  Fase entre o início e o fim da activity  Compreende métodos entre onCreate() e onDestroy()  Visible Lifetime  Activity iniciada e na pilha da tarefa interagindo com o usuário ou não.  Compreende os métodos (callbacks): • onStart(), onStop(), onRestart() • onPause(), onResume()  Foreground Lifetime  Activity visível e em primeiro interagindo com o usuário  Callbacks: • onResume(), onPause()

24

Botões Home e Back
 Botão Home
 Coloca a tarefa da activity em background e retorna

para a tela inicial do Android

 Botão Back
 Remove Activity do topo da pilha da tarefa  Caso a pilha fique vazia retorna para a tela inicial

 Exercício 3
 Ciclo de vida: 03-ActivityLifeCycle

25

Como chamar Activity's
 Para iniciar uma Activity é necessário
 Criar uma Intent  Chamar startActivity ou startActivityForResult  Pegar resultado se necessário

 Criação da Intent
 Na mesma aplicação: new Intent(context, class) • context - instância da Activity chamadora • class - <activity a ser iniciada>.class  Nativas do sistema Android: new Intent(action, uri) • action - uma das ações possiveis • uri - identificador de recurso  De outra aplicação: Intent.setComponent(...)
26

Tabela de possíveis ações (Intent)
Action
ACTION_VIEW
ACTION_VIEW ACTION_VIEW

URI - chamar Uri.parse(uri)
http://www.gmail.com content://com.android.contacts/contacts/1 geo:0,0?q=Presidente+Vargas,Rio+de+Janeiro tel:12345678 tel:12345678

Descrição
Abre browser na página

Mostra contato solicitado Busca no Google Maps
Liga para o número Apenas disca o número Abre lista de contatos do celular

ACTION_CALL
ACTION_DIAL ACTION_PICK

Contacts.CONTENT_URI

27

Como chamar Activity's  Método startActivity(Intent)  Chamar e pegar retorno  Método startActivityForResult(Intent. int requestCode)  Antes de terminar. int resultCode.dados adicionais a serem retornados  A activity chamadora deve implementar o método • onActivityResult(int requestCode. Intent data) • resultCode . a activity chamada deve chamar • setResult(int resultCode) • setResult(int resultCode.RESULT_CANCELED ou RESULT_OK • data . Intent data) 28 .

startActivity(intent).ACTION_VIEW. uri).example.HelloWorld")).Como chamar Activity's  Chamar Activity em outra aplicacao: Intent intent = new Intent().helloworld".parse("http://www.setComponent(new ComponentName( "com.example.  Chamar Activity nativa do Android: Uri uri = Uri. intent.com"). "com.gmail. startActivity(intent). 29 .helloworld. Intent intent = new Intent(Intent.

int valor) putExtra(String nome. float valor). String valor) putExtra(String nome.Passagem de parâmetros para Activity  Métodos da classe Intent para armazenar dados estendidos        putExtra(String nome. etc putExtra(String nome. Bundle bundle) putExtras(Bundle) putExtras(Intent)  Classe Bundle  mapa de pares chave-valor 30 . int [] valor) putExtra(String nome.

Passagem de parâmetros para Activity  Para pegar estes dados estendidos  String getStringExtra(String nome)  int getIntExtra(String nome. int defaultValue)  Bundle getExtras()  Notas sobre o argumento nome  Indicam o nome da chave  Recomendável prefixar com o pacote da aplicação para evitar sobrescrever dados 31 .

startActivityForResult(intent. intent.).hello. etc } else (resultCode == RESULT_CANCELED) { // ação para cancelado } } 32 .. "Hello"). resultCode. int resultCode.putExtra("com.Param1".class).Como chamar Activity's e pegar retorno  Chamar Activity (em algum método da Activity chamadora) // REQUEST_CODE é uma constante definida pela activity // chamadora e identifica esta chamada Intent intent = new Intent(this. data).. Activity2.onActivityResult(requestCode. REQUEST_CODE). Intent data) { super.getStringExtra(.example. if (requestCode == REQUEST_CODE) if (resultCode == RESULT_OK) { // pode usar data.  Pegar retorno(método dentro da Activity chamadora) protected void onActivityResult(int requestCode.

intent. String textParam = intent.getStringExtra(nome). 33 .. intent).. Intent intent = this..putExtra("chave". finish(). "valor").getIntent(). // ... setResult(RESULT_OK. }  Retornando dados Intent intent = new Intent().Lendo parâmetros e retornando dados  Na Activity chamada:  Pegar parâmetros passados public void onCreate(Bundle savedInstanceState) { // . String nome = ..

a aplicação também é encerrada 34 .Encerrando Activity's e aplicações  O método finish()  Encerra a Activity que o chamou  Encerramento da aplicação  Quando a última Activity da pilha (Task) da aplicação termina.

Criando várias Activity's na aplicação  Necessário declarar no AndroidManifest.category.intent.MAIN" /> <category android:name="android.LAUNCHER“/> </intent-filter> </activity> 35 .action.xml  Tornar Activity visível para startActivity() <activity android:name="<nome_da_classe_activy>" />  Tornar Activity executável pelo menu do Android <activity android:name="nome_da_classe_activy“ android:label="nome no menu"> <intent-filter> <action android:name="android.intent.

etc  Activity's especializadas • ListActivity. etc  Classe ViewGroup e Gerenciadores de Layout • Container invisível que guarda View's • Gerencia a disposição destes componentes na tela • FrameLayout. MapActivity 36 . ImageView. ProgressBar. LinearLayout. EditText. TabActivity.Interfaces gráficas  Visão geral  Classe View • A classe para componentes visuais • Desenha na tela através do método onDraw(Canvas)  Widgets • Componentes visuais simples • Subclasses de View • TextView.

layout. ImageView imgView = new ImageView(this).image).setImageResource(R. layout. 37 . LayoutParams. params = new LayoutParams(LayoutParams.MATCH_PARENT.Interfaces gráficas .setLayoutParams(params).WRAP_CONTENT.Layouts  Opções para definição do layout  Arquivos XML na pasta /res/layout <?xml version="1.setLayoutParams(params). LayoutParams. imgView.android.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.MATCH_PARENT).drawable.WRAP_CONTENT). imgView.addView(imgView). setContentView(layout).com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:src="@drawable/image" android:id="@+id/imgView" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </FrameLayout>  Via código da API FrameLayout layout = new FrameLayout(this). LayoutParams params = new LayoutParams(LayoutParams.

Como referenciar recursos no XML  Drawable:  android:src="@drawable/nome_drawable"  Identificadores:  Definição: android:id="@+id/identificador"  Referência: 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“  Tipos de recursos ainda não abordados serão apresentados quando necessário 38 .

Interfaces gráficas .Layouts  FrameLayout  Componentes são organizados em pilha  O último componente adicionado aparece na frente  Atributos 39 .

Layouts  LinearLayout  Componentes são organizados lado a lado  Orientação horizontal (padrão) ou vertical  Atributos 40 .Interfaces gráficas .

Interfaces gráficas .Layouts  TableLayout  Organiza componentes em linhas e colunas  Cada linha é um TableRow (subclase de LinearLayout)  Atributos 41 .

Layouts  RelativeLayout  Posiciona componentes relativamente a outros  Componentes precisam ser identificados: • android:id="@+id/id_componente"  Atributos 42 .Interfaces gráficas .

Interfaces gráficas .Layouts  AbsoluteLayout  Permite controlar posição exata dos componentes  Pode gerar péssimos resultados em diferentes telas  Atributos 43 .

Recomendável para especificar tamanhos de fonte pois elas serão ajustadas tanto para densidade da tela quanto para as preferências do usuários. Exemplo: 0. 44 . pixels = dps * (metrics. Mantém sempre o mesmo tamanho real.5 in = 12. Também baseado no tamanho físico dp/dip Unidade abstrata baseada na densidade física da tela. 80 dp = 80 px. 80 dp = 120 px. já em 240 dpi. onde 160 dp = (Density-independent Pixels) 1 in = 25.densityDpi / 160.Dimensões Dimensão px (pixels) in (polegadas) mm (milímetros) pt (pontos) Descrição Corresponde aos pixels reais da tela Baseado no tamanho físico da tela Baseado no tamanho físico da tela 1 pt = 1/72 in.4 mm.0). Para fazer conversão entre pixels e dps use o seguinte código: DisplayMetrics metrics = getResources(). sp (Scale-independent Pixels) Semelhante ao dp/dip. mas também escalado pelo tamanho de fonte nas preferências do usuário. Em 160 dpi.getDisplayMetrics(). independente da densidade.7 mm = 80 dp.

Outras subclasses de ViewGroup  ListView  Permite rolar conteúdo verticalmente usando ListAdapter  GridView  apresenta o conteúdo na forma de grade  WebView  exibe páginas Web  Gallery e ImageSwitcher  Organiza componentes lado a lado na horizontal  Usado com ImageSwitcher para exibir galeria de imagens  ScrollView  permite rolar conteúdo maior que tela verticalmente  TabHost exibe tela com abas  E outros… 45 .

itemResId.R. neste caso Strings  Atributos 46 . • itemResId pode ser android.simple_list_item_1 • items = array de T‟s.layout. items).ListView  Permite rolar conteúdo verticalmente e selecionar  Interface ListAdapter  Faz a ligação entre ListView e seus elementos  Implementado pela classe ArrayAdapter <T> • new ArrayAdapter<String>(contexto.

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. i.a posição da View no ArrayAdapter.)  Implemente o método onItemClick(.onItemClick(.. o índice do array  int id ...setOnItemClickListener(..referência para o ListView  View view ..e..) de OnItemClickListener  Passe a instância da classe que implementa onItemClick para ListView...)  Parâmetros de OnItemClickListener.a View dentro de parent que foi clicada  int position . neste caso será igual a position 47 .)  AdapterView <?> parent .setAdapter(.o id do elemento.findViewById(id)  Crie um ArrayAdapter passando o array de T‟s  Adicione o ArrayAdapter ao ListView usando ListView.

GridView  Exibe Views na forma de grade  Todas as colunas têm a mesma largura  Faz scrolling do conteúdo  Atributos  Exercício 9  http://developer.android.com/resources/tutorials/views/hello-gridview.html 48 .

WebView e WebSettings  WebView  Apresenta uma página de web  Usa o mesmo componente que o navegador do celular  Necessário permissão android. Salvar senhas. etc.  Métodos principais 49 .INTERNET  WebSettings  Permite configurar o WebView • Permite JavaScript.permission.

Gallery e ImageSwitcher  Gallery  Mostra lista de componentes com rolagem horizontal  Mantém o componente selecionado sempre no centro  ImageSwitcher  Exibe imagens e cria efeitos ao alterná-las 50 .

Interfaces gráficas .Recursos  Na pasta values é possível adicionar XML de vários recursos     Strings Cores Dimensões Array • listas de inteiros. strings. ou recursos  Estilos • definir atributos de cada View uma única vez  Temas • aplicação de estilos a toda activity ou aplicação 51 .

appname)  Cores  Declaração XML: <color name="red">#FF0000</color>  Atributos XML: @color/red  Identificador: R.getString(R.spacing 52 .red)  Dimensões  Declaração XML: <dimen name="spacing">2px</dimen>  Atributos XML: @dimen/spacing  Identificador: R.getColor(R.dimen.string.color.Interfaces gráficas .color.string.red  Cor: getResources().appname  Texto: getResources().Recursos  Strings  Declaração XML: <string name=“appname">Nome Aplicação</string>  Atributos XML: @strings/appname  Identificador: R.

.getIntArray(R.planets.  No código Java int id = R..array..obtainTypedArray(id). Drawable dw1 = array.array.getDrawable(1).sArray). 53 . TypedArray da = res.getDrawable(0)..Recursos  Array no XML <integer-array name="iArray"> <item>10</item> <item>20</item> <item>30</item> </integer-array> <array name="planets"> <item>@drawable/mercurio</item> <item>@drawable/venus</item> . Drawable dw0 = array. <item>@drawable/plutao</item> </array> <string-array name="sArray"> <item>texto1</item> <item>texto2</item> Resources res = getResources().Interfaces gráficas . . </string-array> int [] ia = res.iArray). String [] sa = res.array.getStringArray(R.

android:theme="@style/nome_estilo"> <activity ....Interfaces gráficas .. android:theme="@android:style/Theme.. style="@style/nome_estilo" />  Temas <style name="nome_estilo" parent="android:style/Theme.Back"> <application .Recursos  Estilos <style name="nome_estilo"> <item name="android:textSize">14sp</item> <item name="android:background">@color/branco</item> .Back"> <activity . android:theme="@style/nome_estilo"> 54 .Black"> <item name="android:textSize">14sp</item> <item name="android:background">@color/branco</item> .. </style> <TextView android:layout_width="wrap_content" . </style> <application ... android:theme="@android:style/Theme.......

.0" encoding="utf-8"?> <resources> <array name="planets"> <item>@drawable/mercurio</item> <item>@drawable/venus</item> .... <item>@drawable/plutao</item> </array> <string-array name="sarray"> <item>texto1</item> .Exemplo recursos <?xml version="1. </string-array> <color name="branco">#FFFFFF</color> <style name="nome_estilo" parent="android:style/Theme. </style> <dimen name="spacing">80dip</dimen> <drawable name="gray">#888888</drawable> </resources> /res/values/recurso.xml 55 ..Interfaces gráficas .Black"> <item name="android:textSize">14sp</item> <item name="android:background">@color/branco</item> ..

Widgets • • • • • • • • • • View TextView EditText AutoCompleteTextView Button ImageButton CheckBox ToggleButton RadioButton e RadioGroup Spinner (combo) • DatePicker • TimePicker • ProgressBar • RatingBar • • • • Toast Dialogs ProgressDialog Alertas • AnalogClock • DigitalClock • Chronometer • • • • Menus e Submenus LayoutInflater TabActivity e TabWidget ListView e ListActivity 56 .Interfaces gráficas .

Right.) 57 ..invalida View para ser redesenhada  onDraw(Canvas) .quando há movimento por toque na tela  onFocusChange(... Bottom)="2px"  android:background="@color/blue|#RRGGBB"  android:id="@+id/identificador"  android:visibility="visible | invisible | gone"  android:layout_width="wrap_content | match_parent"  android:layout_height="wrap_content | match_parent"  Métodos  invalidate() . Top. onKeyUp() .Interfaces gráficas ..) ..).chamados quando uma tecla e pressione ou solta.View  Classe base para qualquer componente gráfico  Atributos  android:padding(Left..  onTouchEvent(.responsável por desenhar componente  onKeyDown(.

apresenta caixa de edição de texto AutoCompleteTextView ." android:textColor="@color/..definir lista de opções 58 ...TextView's     TextView ." android:password="true | false" android:numeric="integer | signed | decimal" android:singleLine="true | false" android:lines .quantidade de caracteres digitados antes aparecer sugestões  setAdapter(ArrayAdapter) ..Interface gráfica .caixa de edição com auto-complete Atributos       android:text="@string/.apresenta texto na tela EditText .quantas linhas de texto de altura  AutoCompleteTextView  android:completionThreshold="3" .

setThreashold(int) 59 .xml  Crie TextView.xml  Crie um array de nomes iniciando por letras parecidas  Na activity carregue o layout e o array  Configure AutoCompleteTextView para usar o array  Dica: use ArrayAdapter  Detecte quando EditText for alterado e chame AutoCompleteTextView.TextView's – Exercício 12  Crie um projeto chamado TesteViews  Crie /res/layout/texts. EditText e AutoCompleteTextView  EditText .aceita um número indicando quantos caracteres disparam as sugestões  AutoCompleteTextView com completionThreshold="1"  Crie /res/values/arrays.

..id.button_id).." android:drawableRight="..OnClickListener() { public void onClick(View v) { // Perform action on click } }). />  <Button android:drawableLeft="@drawable/." ....top." android:drawableTop="..." android:drawableBottom="." .. 60 .bottom)  <ImageButton android:src="@drawable/.drawable..image_id)  button..setImageResource(R.Button e ImageButton  Permitem criar botões clicáveis na tela  Button .. button.setCompoundDrawablesWithIntrinsicBounds(left..setOnClickListener(new View. />  Detectando clique: final Button button = (Button) findViewById(R.subclasse de ImageView  Setando imagem via Java e XML  imageButton.right.subclasse de TextView  ImageButton .

"  Métodos  boolean isChecked() .CheckBox e ToggleButton  Botão de dois estados.simula click chamando o método onClick(..) do OnClickListener associado 61 .... que permite marcar um item na tela  CheckBox  android:text="@string/....retorna estado  void toggle() ."  android:textOff="@string/.define estado  boolen performClick() ."  ToggleButton  android:textOn="@string/.alterna estado  void setChecked(boolean) .

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="Não" android:checked="false"/> </RadioGroup> 62 .

int checkedId) { // Note que: checkedId == group. group.radioNao == checkedId.getCheckedRadioButtonId() boolean sim = R. } 63 .id.OnCheckedChangeListener() { public void onCheckedChanged(RadioGroup group.onCreate(savedInstanceState).getCheckedRadioButtonId()  Ou usar o callback onCheckedChanged(. if (sim) { // } else if (nao) { // } } }). setContentView(R.layout.RadioButton e RadioGroup  Pegar id do RadioButton selecionado  RadioGroup.) protected void onCreate(Bundle savedInstanceState) { super.group1). final RadioGroup group = (RadioGroup) findViewById(R.setOnCheckedChangeListener(new RadioGroup.id.. boolean nao = R.radioSim == checkedId.id..radiobutton).

xml <?xml version="1.Spinner (combo)  Exibe um componente com texto que ao ser clicado expande um lista de opções  Exemplo /res/layout/spinner.android.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.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.layout. adapter. View v.layout. R.setDropDownViewResource(R.comboPlanetas).Spinner (combo)  Exemplo SpinnerActivity.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent.getStringArray(R.spinner_textview. getResources(). long id) { // ação } @Override public void onNothingSelected(AdapterView<?> arg0) { } }).id.java (trechos)  Definir a lista de opções e seus layouts ArrayAdapter<String> adapter = new ArrayAdapter<String>(this. int position.setAdapter(adapter).array.planetNames)).simple_textview).  Capturar seleção do usuário spinner. 65 . Spinner spinner = (Spinner) findViewById(R.

0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.xml <?xml version="1.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.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 .android.xml <?xml version="1.Spinner (combo)  Exemplo dos layouts adicionais  /res/layout/spinner_textview.

Spinner (combo) • Exercício: pegar o exemplo. entender e alterar 67 .

id_string  void setSelection(int position) • determina o item atualmente selecionado 68 .string.Spinner (combo)  Outros métodos  Object getSelectedItem() • retorna o item selecionado  long getSelectedItemId() • retorna o id do item selecionado  int getSelectedItemPosition() • retorna a posição do item selecionado no array fornecido para ArrayAdapter  void setPrompt(String) • determina o prompt da lista de opções  void setPromptId(int resId) • determina o prompt a partir de um R.

OnChron ometerTickListener) • Chamado pelo cronômetro quando seu contador muda 69 .Clock e Chronometer  AnalogClock e DigitalClock  Exibem um relógio digital ou analógico 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.

Clock e Chronometer .xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.Exemplo  /res/layout/clock.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <AnalogClock android:id="@+id/analogClock1" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" /> <DigitalClock android:id="@+id/digitalClock1" android:layout_width="match_parent” android:layout_height="wrap_content" android:gravity="center_horizontal" /> <Chronometer android:id="@+id/chronometer1" android:layout_width="match_parent“ android:layout_height="wrap_content“ android:gravity="center_horizontal" /> </LinearLayout> 70 .

chrono. chrono. setContentView(R.id. Chronometer chrono = (Chronometer) findViewById(R.setOnChronometerTickListener( new OnChronometerTickListener() { @Override public void onChronometerTick(Chronometer chronometer) { long elapsedTime = SystemClock.Exemplo  Em uma activity: protected void onCreate(Bundle savedInstanceState) { super.chronometer. if (elapsedTime > 10000) chronometer.layout. } }).elapsedRealtime()).onCreate(savedInstanceState).getBase().getClass(). Log. chrono.clock).chronometer1).stop().start().setBase(SystemClock.elapsedRealtime() . } 71 .Clock e Chronometer .i(this.getName(). "" + elapsedTime).

setCurrentMinute(Integer) setOnTimeChangedListener(OnTimeChangedListener) Selecionar um data (dia.Escolha de data. ano) int getDayOfMonth(). OnDateChangeListener) updateDate(ano. getCurrentMinute() setIs24HourView(boolean). horário  TimePicker           Selecionar horário do dia (24h ou AM/PM) Aceita horas e minutos. getYear() init(ano. mês. mas não segundos Integer getCurrentHour(). dia. mês. getMonth(). mês. boolean is24HourView() setCurrentHour(Integer). dia)  DatePicker 72 .

com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <DatePicker android:id="@+id/dtpicker" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TimePicker android:id="@+id/tmpicker" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> 73 .Exemplo <?xml version="1.android. horário .0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.Escolha de data.

ProgressBar  Exibe um indicador de progresso de uma operação  Estilos como percentual ou indeterminado  Estilos (atributo style no XML): ?android:progressBarStyle (padrão) Indeterminado circular de tamanho médio ?android:progressBarStyleSmall ?android:progressBarStyleLarge ?android:progressBarStyleHorizontal Indeterminado circular de tamanho pequeno Indeterminado circular de tamanho grande Barra horizontal indeterminado ou com percentual  Métodos setProgress(int) setSecondaryProgress(int) boolean isIndeterminate() Determina o nível de progresso para uma barra percentual Determina o nível secundário de progresso para uma barra percentual Retorna true se for indeterminado 74 .

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 .ProgressBar .

Exibe estrelas pequenas. 76 ?android:ratingBarStyleSmall ?android:ratingBarStyleIndicator . Apenas indicador. Apenas indicador. Exibe estrelas médias. Pode-se usar isIndicator=“true” para ser apenas um indicador.RatingBar  Mostra uma barra de classificação com estrelas  A barra pode ser interativa ou apenas um indicator  Métodos int getNumStars() float getRating() float getStepSize() boolean isIndicator() void setRating(float rating) Retorna quantidade de estrelas totais Retorna a classificação (nota) Retorna o tamanho de cada salto das notas Retorna true se for indicadora ou false se for interativa Determina a classificação  Estilos ?android:ratingBarStyle (default) Exibe estrelas grandes e permite alteração da classificação.

5" android:rating="2.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" /> <RatingBar style="?android:ratingBarStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5" android:stepSize=".RatingBar <RatingBar style="?android:ratingBarStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5" android:stepSize=".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" android:rating="2.5" /> 77 .

toast.  Apenas mensagem de texto Toast. 78 . toast.makeText(this.setView(view).Toast  Exibição de alertas por tempo determinado  Sem interação com usuário  View personalizada Toast toast = new Toast(this).show().LENGTH_LONG).setDuration(Toast. toast. Toast.show().LENGTH_SHORT). “Mensagem”.

Se nenhum Dialog com o id tiver sido mostrado lança IllegalArgumentException. Implementado pelo desenvolver. e em seguida onPrepareDialog(). configurar alguma varíavel. void dismissDialog(int id) void removeDialog(int id) Dialog onCreateDialog (id. Bundle) void onPrepareDialog(id. Retorna true em caso de sucesso. Callback que permite que o Dialog seja preparado antes de ser apresentado. Caso esteja sendo exibido. Por exemplo. Dialog. 79 . Bundle) Callback chamado quando um Dialog deve ser criado para o id especificado.Dialogs  Usado para abrir janelas na tela  Recomendado usar os métodos a seguir para que a Activity gerencie o ciclo de vida do Dialog. Fecha o Dialog criado por showDialog() com o id especificado. Remove qualquer referência para o Dialog especificado. ele é fechado antes. boolean showDialog(int id. Bundle) Tenta mostrar o Dialog para o id chamando onCreateDialog() se necessário.

titulo. • indet = se é indeterminado ou não (percentual)  Feche o Dialog.ProgressDialog  Janela para mostrar o progresso de uma operação  Como usar sem os métodos anteriores  Mostrar o Dialog • dialog = ProgressDialog.show(contexto.dismiss().  Alterar o progresso (se indet = true) • dialog. msg. quando concluir • dialog.setProgress(int v) • v entre 0 e 10000 80 . bool indet).

AlertDialog  Exibe um alerta ao usuário  Conteúdo e botões de escolha personalizados  Classe AlertDialog. Ok. Yes. listener) setItems(String []. etc) setNegativeButton(String. Exibe o alerta para o usuário Cancela o alerta 81 Nota: listener é uma instância de DialogInterface. Cancelável significa que usuário não pode fechar com botão voltar. No. int checkedItem. listener) setCancelable(boolean) show() cancel() Texto do botão negativo (Não. etc) Items a serem mostrados para usuário selecionar Determina lista de RadioButtons a serem mostrados ao usuário Alerta cancelável ou não. listener) Determina o ícone a ser mostrado Determina o título do alerta Mensagem a ser mostrada no interior do alerta Texto do botão positivo (Sim.OnClickListener .Builder para construir alertas setIcon(int resId) setTitle(String) setMessage(String) setPositiveButton(String. listener) setSingleChoiceItems(String [].

. AlertDialog alert = builder.OnClickListener() { .Builder(this).Builder builder = new AlertDialog.setNegativeButton("No“. builder.setMessage("Are you sure you want to exit?").setItems(items.. "Blue"}..setTitle("Pick a color"). . builder. builder. builder. builder..Exemplos AlertDialog.setCancelable(false).AlertDialog . 82 ..).). CharSequence[] items = {"Red". "Green".create(). new DialogInterface..Builder(this).Builder builder = new AlertDialog. . builder. } ).show().setPositiveButton("Yes". builder. AlertDialog.

addSubMenu(“Outros”).add(0.add(0. item = menu.onCreateOptionsMenu(menu). NOVO.add(0. }  As constantes ABRIR.onCreateOptionsMenu() public boolean onCreateOptionsMenu(Menu menu) { super. SAIR. item = submenu.Menus e Submenus  É possível criar menus e um submenu para cada menu  São exibidos quando a tecla Menu é apertada  Devem ser criados em Activity. “Novo”). 0. “Sair”). “Pesquisar”). “Salvar”). item = submenu. SubMenu submenu = menu.add(0. “Limpar”). item = menu. LIMPAR. 0. return true.add(0. MenuItem item = menu. PESQUISAR. 0. ABRIR. SALVAR. 0. 0. SALVAR.add(0. etc são definidas pelo desenvolvedor  Retorne true para que o menu seja mostrado 83 . 0. “Abrir”). item = submenu.

add()  Quando um item é selecionado pelo usuário o método boolean onOptionsItemSelected (MenuItem) é chamado  Compare o id usando MenuItem.MenuItems  Representa um item selecionável de menu  Métodos setEnabled(boolean) setVisible(boolean) setTitle(int) setTitle(String) setIcon(int) setIcon(Drawable) int getItemId() Determina se o item é selecionável ou não Determina se o item é visível ou não Define o texto que aparece no item Define o ícone que aparece no item Retorna o id do item conforme Menu.getItemId() 84 .

null).show().LAYOUT_INFLATER_SERVICE).setView(view). toast. toast.inflate(resId. 85 . View view = inflater. toast.LENGTH_SHORT).LayoutInflater  Constrói hierarquia de uma View a partir de um layout  Exemplo LayoutInflater inflater = (LayoutInflater) getSystemService(Context.setDuration(Toast. // Agora é possível passar para um Toast e exibir na tela Toast toast = new Toast(this).

A parâmetro pos indica a posição do item na lista de item do adaptador. 86 . long id) Callback chamado quando um item da lista é selecionado pelo usuário.ListActivity  Cria uma activity que mostra uma lista de itens  Simplifica codificação Java  Evita criação de XML de layout  Apenas listas personalizadas precisariam  Métodos adicionais em relação à activity: void setListAdapter(ListAdapter) Determina o adaptador que fornece os items e layout ListAdapter getListAdapter() ListView getListView() Retorna o adaptador atual Retorna o objeto ListView utilizado pela ListActivity void onListItemClick(ListView. View. int pos.

addTab(TabSpec) para adicionar a aba 87 .newTabSpec(String tag) • TabSpec.TabActivity  Usada para criar telas com abas  Cada aba fica associada a uma activity ou view  Etapas de uso:  Herde de TabActivity  No método onCreate() • Obtenha o objeto TabHost usando getTabHost() • Para cada aba a ser criada • Obtenha um objeto TabSpec chamando TabHost.setContent() para definir o conteúdo da aba • TabHost.setIndicator() para definir o titulo e/ou imagem • TabSpec.

88 . Drawable) Especifica apenas um texto como indicador da aba.TabContentFactory que será responsável por criar o conteúdo da aba. setIndicator(String) setIndicator(View) setIndicator(String. Especifica uma View como indicador da aba. Especifica a Intent que deve ser usada para iniciar uma activity que será o conteúdo da aba.TabActivity  A classe TabSpec possui variantes em seus métodos: setContent(int viewId) setContent(Intent) setContent(TabContentFactory) Especifica o id da View que deve ser usada como o conteúdo da aba. Especifica um texto e um ícone como indicador da aba. Especifica um TabHost.

Services e Notification AlarmManager e Handler Banco de Dados e ContentProvider Mapas e GPS Sockets e Web Services Projeto 89 .Agenda das próximas aulas        Intent filter BroadcastReceiver.

Sign up to vote on this title
UsefulNot useful