PDM - Aula07- Ver 01 - 30/05/2017 03:46 Programação de Dispositivos Móveis Aula 07 Interfaces Gráficas -Widgets View TextView EditText AutoCompleteTextView Button ImageButton CheckBox ToggleButton RadioButton e RadioGroup Spinner (combo) AnalogClock DigitalClock Chronometer DatePicker TimePicker ProgressBar 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, EditText, ImageView, ProgressBar, etc Classe ViewGroup e Gerenciadores de Layout Container invisível que guarda View's Gerencia a disposição destes componentes na tela FrameLayout, LinearLayout, etc Activity's especializadas ListActivity, TabActivity, MapActivity 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" Página 1 de 16 RatingBar Toast ProgressDialog AlertDialog Menus e Submenus LayoutInflater TabActivity e TabWidget ListView e ListActivity PDM - Aula07- Ver 01 - 30/05/2017 03:46 Estilos: style="@style/nome_estilo“ Tipos de recursos ainda não abordados serão apresentados quando necessário Dimensões px (pixels): Corresponde aos pixels reais da tela in (polegadas): Baseado no tamanho físico da tela mm (milímetros): Baseado no tamanho físico da tela pt (pontos): 1 pt = 1/72 in. Também baseado no tamanho físico dp/dip(Density-independent Pixels): Unidade abstrata baseada na densidade física da tela, onde 160 dp = 1 in = 25.4 mm. Mantém 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. sp(Scale-independent Pixels): Semelhante ao dp/dip,mas também escalado pelo tamanho de fonte nas preferências do usuário. 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. Interface Gráfica -TextView's TextView -apresenta texto na tela EditText -apresenta caixa de edição de texto AutoCompleteTextView -caixa de edição com auto-complete Atributos 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 sugestões setAdapter(ArrayAdapter) -definir lista de opções Button e ImageButton Permitem criar botões clicáveis 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); Página 2 de 16 PDM - Aula07- Ver 01 - 30/05/2017 03:46 button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // Perform action on click } }); CheckBox e ToggleButton Botão de dois estados, quepermite marcar um item na tela CheckBox android:text="@string/..." ToggleButton android:textOn="@string/..." android:textOff="@string/..." Métodos boolean isChecked() -retorna estado void toggle() -alterna estado void setChecked(boolean) -define estado boolen performClick() -simula click chamando o método onClick(..) doOnClickListenerassociado AlertDialog Exibe um alerta ao usuário Conteúdo e botões de escolha personalizados Classe AlertDialog.Builder para construir alertas setIcon(int resId): Determina o ícone a ser mostrado setTitle(String): Determina o título do alerta setMessage(String): Mensagem a ser mostrada no interior do alerta setPositiveButton(String, listener): Texto do botão positivo (Sim, Yes, Ok, etc) setNegativeButton(String, listener): Texto do botão negativo (Não, No, etc) setItems(String [], listener): Items a serem mostrados para usuário selecionar setSingleChoiceItems(String [], int checkedItem, listener): Determina lista de RadioButtons a serem mostrados ao usuário setCancelable(boolean): Alerta cancelável ou não. Cancelável significa que usuário não pode fechar com botão voltar. show(): Exibe o alerta para o usuário cancel(): Cancela o alerta Nota: listener é uma instância de DialogInterface.OnClickListener ProgressDialog Janela para mostrar o progresso de uma operação Como usar sem os métodos anteriores Mostrar o Dialog o dialog = ProgressDialog.show(contexto, titulo, msg, bool indet); indet = se é indeterminado ou não (percentual) Feche o Dialog, quando concluir o dialog.dismiss(); Alterar o progresso (se indet = true) o dialog.setProgress(int v) // v entre 0 e 10000 Página 3 de 16 PDM - Aula07- Ver 01 - 30/05/2017 03:46 Criando Aplicação Android (Aula07B) O aplicativo que vamos desenvolver permitirá o usuário verificar a funcionalidade de alguns Views. Vamos aprender mais elementos visuais e como se faz a ligação desses elementos do layout xml (main.xml e outros) com a linguagem de programação Java. Vamos criar a nossa aplicação “Aula07B”. No Eclipse, faça o seguinte: 1. Clique no menu “File” -> “New” e escolha a opção “Other...” 2. Nas opções que surgiram, selecione “Android Project” e clique em “Next” A janela “New Android Project” que surgiu serve para que você digite os dados do projeto que será criado. Preencha-a da seguinte forma: Project Name: Aula07B Application name: Aula07B Package name: br.pdm.aula07bex1 Create Activity: Aula07BActivity Min SDK Version: 8 (pode definir outro tipo de emulador) Clique em “Finish” Resumo dos nomes ao iniciar um 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 aplicação. Create Activity - O nome da classe que representa a tela inicial da aplicação. Min SDK Version – Tipo de Emulador Android Código – Aula07B Em seguida vamos criar a tela principal. O arquivo main.xml, responsável pelo layout fica com o seguinte conteúdo. Página 4 de 16 PDM - Aula07- Ver 01 - 30/05/2017 03:46 Listagem 1. main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/button5" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Auto Complete TextView" /> <Button android:id="@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Imagem e ImageButton" /> <Button android:id="@+id/button6" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Spinner (ComboBox)" /> <Button android:id="@+id/button2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="AlertDialog" /> <Button android:id="@+id/button3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Toast" /> <Button android:id="@+id/button4" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="ListView" /> <Button android:id="@+id/button7" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="ProgressDialog" /> Página 5 de 16 PDM - Aula07- Ver 01 - 30/05/2017 03:46 </LinearLayout> Listagem 2. Aula07BActivity.java package com.pdm.aula07bex1; import com.pdm.aula07bex1.R; import import import import import import android.app.Activity; android.content.Intent; android.os.Bundle; android.view.View; android.view.View.OnClickListener; android.widget.Button; public class Aula7BActivity extends Activity implements OnClickListener{ /** Called when the activity is first created. */ Button b1,b2,b3,b4,b5,b6,b7; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b1 = (Button) this.findViewById(R.id.button1); b1.setOnClickListener(this); b2 = (Button) this.findViewById(R.id.button2); b2.setOnClickListener(this); b3 = (Button) this.findViewById(R.id.button3); b3.setOnClickListener(this); b4 = (Button) this.findViewById(R.id.button4); b4.setOnClickListener(this); b5 = (Button) this.findViewById(R.id.button5); b5.setOnClickListener(this); b6 = (Button) this.findViewById(R.id.button6); b6.setOnClickListener(this); b7 = (Button) this.findViewById(R.id.button7); b7.setOnClickListener(this); } public void onClick(View v){ if (v.getId() == b1.getId()){ startActivity(new Intent(this, } if (v.getId() == b2.getId()){ startActivity(new Intent(this, } if (v.getId() == b3.getId()){ startActivity(new Intent(this, } if (v.getId() == b4.getId()){ startActivity(new Intent(this, } if (v.getId() == b5.getId()){ startActivity(new Intent(this, } if (v.getId() == b6.getId()){ startActivity(new Intent(this, } if (v.getId() == b7.getId()){ startActivity(new Intent(this, } ExemploImageImageButton.class)); ExemploAlertDialog.class)); ExemploToast.class)); ExemploListView.class)); ExemploAutoCompleteTextView.class)); ExemploSpinner.class)); ExemploProgressDialog.class)); } } Listagem 3. strings.xml <?xml version="1.0" encoding="utf-8"?> <resources> Página 6 de 16 PDM - Aula07- Ver 01 - 30/05/2017 03:46 <string name="hello">Aula7BActivity!</string> <string name="app_name">Aula7B</string> <string name="texto_combo">Isto é um Combo</string> </resources> Listagem 4. AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.pdm.veiculo" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".Aula7BActivity" 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=".ExemploAutoCompleteTextView"></activity> <activity android:name=".ExemploImageImageButton"></activity> <activity android:name=".ExemploAlertDialog"></activity> <activity android:name=".ExemploToast"></activity> <activity android:name=".ExemploListView"></activity> <activity android:name=".ExemploSpinner"></activity> <activity android:name=".ExemploProgressDialog"></activity> </application> </manifest> Listagem 5. exemplo_autocomplete_textview.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" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Estados" /> <AutoCompleteTextView android:id="@+id/estados" android:layout_width="fill_parent" android:layout_height="wrap_content" android:completionThreshold="1" android:completionHint="Digite o nome de um estado" /> <Button android:id="@+id/buttonSair" android:layout_width="wrap_content" android:layout_height="wrap_content" Página 7 de 16 PDM - Aula07- Ver 01 - 30/05/2017 03:46 android:layout_gravity="center" android:text="Sair" /> </LinearLayout> Listagem 6. ExemploAutoCompleteTextView.java package com.pdm.aula07bex1; import import import import import import import android.app.Activity; android.os.Bundle; android.view.View; android.view.View.OnClickListener; android.widget.ArrayAdapter; android.widget.AutoCompleteTextView; android.widget.Button; public class ExemploAutoCompleteTextView extends Activity implements OnClickListener{ private static final String[] ESTADOS = new String[] { "Acre", "Alagoas", "Amapá","Amazonas", "Bahia", "Ceará", "Distrito Federal", "Goiás","Espírito Santo", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grandedo Norte", "Rio Grande do Sul","Rondônia", "Roraima", "São Paulo", "Santa Catarina", "Sergipe","Tocantins" }; Button bSair; //@Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.exemplo_autocomplete_textview); initEstados(); bSair = (Button) this.findViewById(R.id.buttonSair); bSair.setOnClickListener(this); } private void initEstados() { //Cria um ArrayAdapter para exibir os estados ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, ESTADOS); //estados AutoCompleteTextView estatos = (AutoCompleteTextView) findViewById(R.id.estados); estatos.setAdapter(adaptador); } public void onClick(View v){ if (v.getId() == bSair.getId()){ finish(); } } } Listagem 7. exemplo_image_imagebutton.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" > <ImageView android:id="@+id/imgid" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> <ImageView android:id="@+id/imgid2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> <ImageButton android:id="@+id/imageButton1" Página 8 de 16 PDM - Aula07- Ver 01 - 30/05/2017 03:46 android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/smile1" /> <ImageButton android:id="@+id/imageButton2" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/buttonSair" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Sair" /> </LinearLayout> Listagem 8. ExemploImageImageButton.java package com.pdm.aula07bex1; import import import import import import import import android.app.Activity; android.os.Bundle; android.view.View; android.view.View.OnClickListener; android.widget.Button; android.widget.ImageButton; android.widget.ImageView; android.widget.Toast; public class ExemploImageImageButton extends Activity implements OnClickListener Button bSair; ImageButton bImagem1,bImagem2; public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.exemplo_imagem_imagebutton); ImageView imgView = (ImageView)findViewById(R.id.imgid); imgView.setImageResource(R.drawable.balloons); imgView = (ImageView)findViewById(R.id.imgid2); imgView.setImageResource(R.drawable.icon); bImagem1 = (ImageButton) findViewById(R.id.imageButton1); bImagem1.setOnClickListener(this); bImagem2 = (ImageButton) findViewById(R.id.imageButton2); bImagem2.setImageResource(R.drawable.smile2); bImagem2.setOnClickListener(this); bSair = (Button) this.findViewById(R.id.buttonSair); bSair.setOnClickListener(this); } public void onClick(View v){ if (v.getId() == bSair.getId()){ finish(); } if (v.getId() == bImagem1.getId()){ Toast.makeText(ExemploImageImageButton.this, "Imagem 1 OK", Toast.LENGTH_SHORT).show(); } if (v.getId() == bImagem2.getId()){ Toast.makeText(ExemploImageImageButton.this, "Imagem 2 OK", Toast.LENGTH_SHORT).show(); } } } Listagem 9. exemplo_spinner.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" Página 9 de 16 { PDM - Aula07- Ver 01 - 30/05/2017 03:46 android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Selecione uma opção" /> <Spinner android:id="@+id/spinnerPlanetas" android:layout_width="fill_parent" android:layout_height="wrap_content" android:drawSelectorOnTop="true" android:prompt="@string/texto_combo" /> <ImageView android:id="@+id/img" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <Button android:id="@+id/buttonExibir" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Exibir Valor" /> </LinearLayout> Listagem 10. ExemploSpinner.java package com.pdm.aula07bex1; import import import import import import import import import import import import android.app.Activity; android.content.Intent; android.os.Bundle; android.view.View; android.view.View.OnClickListener; android.widget.AdapterView; android.widget.AdapterView.OnItemSelectedListener; android.widget.ArrayAdapter; android.widget.Button; android.widget.ImageView; android.widget.Spinner; android.widget.Toast; public class ExemploSpinner extends Activity implements OnClickListener{ Button bExibir; Spinner sPlaneta=null; private String[] planetas = new String[] { "Mercúrio", "Venus", "Terra", "Marte", "Júptier", "Saturno", "Urano", "Netuno", "Plutão" }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.exemplo_spinner); sPlaneta = (Spinner) findViewById(R.id.spinnerPlanetas); ArrayAdapter adaptador = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, planetas); adaptador.setDropDownViewResource(android.R.layout.simple_spinner_item); sPlaneta.setAdapter(adaptador); bExibir = (Button) this.findViewById(R.id.buttonExibir); bExibir.setOnClickListener(this); } public void onClick(View v){ if (v.getId() == bExibir.getId()){ String item = (String) sPlaneta.getSelectedItem(); Toast.makeText(this, "Valor do Item: " + item, Toast.LENGTH_SHORT).show(); } } } Listagem 11. exemplo_alertdialog.xml Página 10 de 16 PDM - Aula07- Ver 01 - 30/05/2017 03:46 <?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" > <Button android:id="@+id/b" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Teste Alerta" /> </LinearLayout> Listagem 12. ExemploAlertDialog.java package com.pdm.aula07bex1; import import import import import import import import android.app.Activity; android.app.AlertDialog; android.content.DialogInterface; android.os.Bundle; android.view.View; android.widget.Button; android.widget.Toast; android.view.View.OnClickListener; public class ExemploAlertDialog extends Activity{ Button b; String msg; //@Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.exemplo_alertdialog); // Exibe o alerta de confirmação ao clicar no botão b = (Button) findViewById(R.id.b); b.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { AlertDialog diaBox = criarDialogBox(); diaBox.show(); // WARNING: (in general...) // after showing a dialog you should have NO more code. Let the buttons of // // // // // the dialog box handle the rest of the logic. For instance, in this example a modal dialog box is displayed (once shown you can not do anything to the parent until the child is closed) however the code in the parent continues to execute after the show() method is called. //txtMsg.setText("I am here!"); } }); }// fim do onCreate private AlertDialog criarDialogBox(){ AlertDialog meuDialogo = new AlertDialog.Builder(this) //configura messagem, título, e imagem .setTitle("Finalização") .setMessage("Tem certeza que deseja sair?") .setIcon(R.drawable.smile1) //configura os três botões de opção .setPositiveButton("Sim", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { //o que deve ser feito quando a resposta for SIM msg = "SIM "+ Integer.toString(whichButton); //txtMsg.setText(msg); Página 11 de 16 PDM - Aula07- Ver 01 - 30/05/2017 03:46 Toast.makeText(ExemploAlertDialog.this, "Sim! " + msg, Toast.LENGTH_SHORT).show(); finish(); } })//setPositiveButton .setNeutralButton("Cancela",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { //o que deve ser feito quando a resposta for CANCELA msg = "CANCELA " + Integer.toString(whichButton); //txtMsg.setText(msg); Toast.makeText(ExemploAlertDialog.this, "Cancela! " + msg, Toast.LENGTH_SHORT).show(); }//OnClick })//setNeutralButton .setNegativeButton("Não", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { //o que deve ser feito quando a resposta for NÃO msg = "NÃO " + Integer.toString(whichButton); //txtMsg.setText(msg); Toast.makeText(ExemploAlertDialog.this, "Não! " + msg, Toast.LENGTH_SHORT).show(); } })//setNegativeButton .create(); return meuDialogo; } } Listagem 13. exemplo_toast.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" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="O Toast abriu com uma View em XML. \nClick no botão Repetir para ver Views no Toast também, não somente textos" /> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center"> <Button android:id="@+id/buttonRepetir" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Repetir" /> <Button android:id="@+id/buttonSair" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Sair" /> </LinearLayout> </LinearLayout> Listagem 14. exemplo_toast_view_inflate.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" > Página 12 de 16 PDM - Aula07- Ver 01 - 30/05/2017 03:46 <View android:layout_height="2dip" android:layout_width="fill_parent" android:background="#FF909090" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Exemplo para o LayoutInflater" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="O Android permite abrir View dentro de Mensagem!" /> <ImageView android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/smile1" /> <View android:layout_height="2dip" android:layout_width="fill_parent" android:background="#FF909090" /> </LinearLayout> Listagem 15. ExemploToast.java package com.pdm.aula07bex1; import import import import import import import import android.app.Activity; android.content.Context; android.os.Bundle; android.view.LayoutInflater; android.view.View; android.view.View.OnClickListener; android.widget.Button; android.widget.Toast; public class ExemploToast extends Activity implements OnClickListener{ Button bSair,bRepetir; Toast toast; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.exemplo_toast); bSair = (Button) this.findViewById(R.id.buttonSair); bSair.setOnClickListener(this); bRepetir = (Button) this.findViewById(R.id.buttonRepetir); bRepetir.setOnClickListener(this); // // Toast toast = Toast.makeText(this, "Teste de Mensagem", Toast.LENGTH_SHORT); toast.show(); View tv = getView(); this.toast = new Toast(this); this.toast.setView(tv); this.toast.setDuration(Toast.LENGTH_LONG); this.toast.show(); } private View getView() { //View view = new TextView(this); //view.setText("Podemos mostrar qualquer coisa no Toast"); //Abrir uma View a partir de um xml LayoutInflater inflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflate.inflate(R.layout.exemplo_toast_view_inflate, null); Página 13 de 16 PDM - Aula07- Ver 01 - 30/05/2017 03:46 //ImageView view = new ImageView(this); //view.setImageResource(R.drawable.smile1); return view; } public void onClick(View v){ if (v.getId() == bSair.getId()){ finish(); } if (v.getId() == bRepetir.getId()){ this.toast.show(); } } } Listagem 16. exemplo_listview.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" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/android" /> <View android:layout_height="2dip" android:layout_width="wrap_content" android:background="#cccccc" /> <ListView android:id="@+id/listview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#000000" /> </LinearLayout> Listagem 17. ExemploListView.java package com.pdm.aula07bex1; import java.util.ArrayList; import com.pdm.aula07bex1.adapter.Smile; import com.pdm.aula07bex1.adapter.SmileAdapter; import import import import import import import import android.app.Activity; android.os.Bundle; android.util.Log; android.view.View; android.widget.AdapterView; android.widget.AdapterView.OnItemClickListener; android.widget.ListView; android.widget.Toast; public class ExemploListView extends Activity implements OnItemClickListener { protected static final String CATEGORIA = "livro"; private ListView listView; //@Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.exemplo_listview); ArrayList<Smile> lista = new ArrayList<Smile>(); Página 14 de 16 PDM - Aula07- Ver 01 - 30/05/2017 03:46 lista.add(new Smile("Feliz", Smile.FELIZ)); lista.add(new Smile("Triste", Smile.TRISTE)); lista.add(new Smile("Louco", Smile.LOUCO)); // Adaptador customizado SmileAdapter adapter = new SmileAdapter(this, lista); // ListView listView = (ListView) findViewById(R.id.listview); listView.setAdapter(adapter); listView.setOnItemClickListener(this); } public void onItemClick(AdapterView<?> parent, View view, int posicao, long id) { Log.i(CATEGORIA, "ExemploListView.onItemClick posicao: " + posicao + ", id: " + id); // Recupera o Smile naquela posição Smile smile = (Smile) listView.getAdapter().getItem(posicao); // Exibe um alerta Toast.makeText(this, "Smile selecionado: " + smile.nome, Toast.LENGTH_SHORT).show(); } } Listagem 16. exemplo_progressdialog.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/img" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> Listagem 17. ExemploProgressDialog.java package com.pdm.aula07bex1; import import import import java.io.IOException; java.io.InputStream; java.net.MalformedURLException; java.net.URL; import import import import import import import import android.app.Activity; android.app.ProgressDialog; android.graphics.Bitmap; android.graphics.BitmapFactory; android.os.Bundle; android.os.Handler; android.util.Log; android.widget.ImageView; public class ExemploProgressDialog extends Activity { private static final String URL = "http://chart.apis.google.com/chart?chs=150x150&cht=qr&chl=www.livroandroid.com.br&choe=UTF-8"; private ProgressDialog dialog; private Handler handler = new Handler(); @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.exemplo_progressdialog); //Abre a janela com a barra de progresso dialog = ProgressDialog.show(this,"Exemplo", "Buscando imagem, por aguarde...", false,true); Página 15 de 16 PDM - Aula07- Ver 01 - 30/05/2017 03:46 // // // // // // // ProgressDialog dialog = new ProgressDialog(this); dialog.setTitle("Exemplo"); dialog.setMessage("Buscando imagem, por aguarde..."); dialog.setIndeterminate(true); dialog.setProgress(int v); // se indeterminate = true - v entre 0 e 10000 dialog.setCancelable(true); dialog.show(); downloadImagem(URL); } //Faz o download da imagem em uma nova Thread private void downloadImagem(final String urlImg) { new Thread() { @Override public void run() { try { //Faz o download da imagem URL url = new URL(urlImg); InputStream is = url.openStream(); final Bitmap imagem = BitmapFactory.decodeStream(is); is.close(); //Atualiza a tela atualizaTela(imagem); } catch (MalformedURLException e) { return; } catch (IOException e) { //Uma aplicação real deveria tratar este erro Log.e("Erro ao fazer o download", e.getMessage(),e); } } }.start(); } //Utiliza um Handler para atualizar a tela private void atualizaTela(final Bitmap imagem) { handler.post(new Runnable(){ public void run() { //Fecha a janela de progresso dialog.dismiss(); ImageView imgView = (ImageView) findViewById(R.id.img); imgView.setImageBitmap(imagem); }}); } } Página 16 de 16