Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Google Android - Aula 4 - Turma 2015.1

Google Android - Aula 4 - Turma 2015.1

Slides do curso "Desenvolvimento Google Android", aula 4, ministrado na Linux Fi (turma 2015.1).

Eduardo Carneiro

July 04, 2015
Tweet

More Decks by Eduardo Carneiro

Other Decks in Programming

Transcript

  1. 74 Estilos <style name="StyleButton"> <item name="android:textSize">14sp</item> <item name="android:paddingTop">8dp</item> <item name="android:paddingBottom">8dp</item>

    <item name="android:paddingLeft">10dp</item> <item name="android:paddingRight">10dp</item> <item name="android:textColor">#000000</item> <item name="android:gravity">left|center_vertical</item> <item name="android:background">@drawable/button_selector</item> </style> <style name="StyleButton"> <item name="android:textSize">14sp</item> <item name="android:paddingTop">8dp</item> <item name="android:paddingBottom">8dp</item> <item name="android:paddingLeft">10dp</item> <item name="android:paddingRight">10dp</item> <item name="android:textColor">#000000</item> <item name="android:gravity">left|center_vertical</item> <item name="android:background">@drawable/button_selector</item> </style> <Button android:id="@+id/btCompanhia" android:layout_width="240dp" android:layout_height="wrap_content" android:text="@string/busca_companhia" android:drawableLeft="@drawable/ic_companhia" style="@style/StyleButton"/> <Button android:id="@+id/btCompanhia" android:layout_width="240dp" android:layout_height="wrap_content" android:text="@string/busca_companhia" android:drawableLeft="@drawable/ic_companhia" style="@style/StyleButton"/>
  2. 75 Selector <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/bkg_button" /> <item

    android:state_pressed="true" android:drawable="@drawable/bkg_button_click" /> </selector> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/bkg_button" /> <item android:state_pressed="true" android:drawable="@drawable/bkg_button_click" /> </selector>
  3. 78 ListActivity e ListView • Exibe uma lista de objetos

    na vertical; • Para configurar como os itens são exibidos, utilizaremos um Adapter; • Estudaremos as classes android.app.ListActivity, android.view.ListView e a interface android.widget.ListAdapter
  4. 79 Personalizando a lista public class PlaceAdapter extends BaseAdapter {

    private List<Place> placeList; public PlaceAdapter(List<Place> placeList) { this.placeList = placeList; } @Override public int getCount() { return placeList.size(); } @Override public Object getItem(int position) { return placeList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { Place place = (Place) getItem(position); ViewHolder holder; if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); convertView = inflater.inflate(R.layout.place_item, parent, false); holder = new ViewHolder(); ... convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } ... return convertView; } static class ViewHolder { ... } } public class PlaceAdapter extends BaseAdapter { private List<Place> placeList; public PlaceAdapter(List<Place> placeList) { this.placeList = placeList; } @Override public int getCount() { return placeList.size(); } @Override public Object getItem(int position) { return placeList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { Place place = (Place) getItem(position); ViewHolder holder; if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); convertView = inflater.inflate(R.layout.place_item, parent, false); holder = new ViewHolder(); ... convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } ... return convertView; } static class ViewHolder { ... } }
  5. 80 GridActivity e GridView • Lista os itens em grade;

    • Também é preenchido com a ajuda de um Adapter; • android:numColumns android:columnWidth
  6. 82 ActionBar • Incluída na API 11 (v3.0); • Provê

    espaço dedicado para dar identidade ao app e indicar ao usuário onde ele está; • Destaca ações importantes; • Permite navegação no app. 1. Ícone da aplicação 2. Itens de ação (action items) 3. Itens extras (action overflow)
  7. 83 API de compatibilidade Por que API de compatibilidade? Para

    manter compatibilidade com versões anteriores da API e para utilizar recursos disponíveis apenas em novas versões. O que é esta API? A API de compatibilidade, ou Support Library, contém diversas bibliotecas que podem ser incluídas no seu app. Cada uma dá suporte a um intervalo de versões da API do Android. No geral, o recomendado é incluir v4 support e v7 appcompat. Quando usar? Sempre! http://developer.android.com/tools/support-library/features.html
  8. 86 Fragment • Incluído na API 11 (v3.0); • Representa

    um comportamento ou uma porção da interface com o usuário em uma Activity; • Principais classes: Fragment, FragmentManager e FragmentTransaction
  9. 88 Exemplo de uso <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/fragmentList"

    android:name="com.example.testefragments.PessoaListFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> <FrameLayout android:id="@+id/layoutDetail" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/fragmentList" android:name="com.example.testefragments.PessoaListFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> <FrameLayout android:id="@+id/layoutDetail" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2" /> </LinearLayout> FragmentManager fm = getSupportFragmentManager(); PessoaDetalheFragment detalhe = (PessoaDetailFragment) fm.findFragmentByTag("detalhe"); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.layoutDetail, PessoaDetailFragment.newInstance(p), "detalhe"); ft.commit(); FragmentManager fm = getSupportFragmentManager(); PessoaDetalheFragment detalhe = (PessoaDetailFragment) fm.findFragmentByTag("detalhe"); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.layoutDetail, PessoaDetailFragment.newInstance(p), "detalhe"); ft.commit();
  10. 89 Exemplo de uso <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/fragmentList"

    android:name="com.example.testefragments.PessoaListFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> <FrameLayout android:id="@+id/layoutDetail" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/fragmentList" android:name="com.example.testefragments.PessoaListFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> <FrameLayout android:id="@+id/layoutDetail" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2" /> </LinearLayout> FragmentManager fm = getSupportFragmentManager(); PessoaDetalheFragment detalhe = (PessoaDetailFragment) fm.findFragmentByTag("detalhe"); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.layoutDetail, PessoaDetailFragment.newInstance(p), "detalhe"); ft.commit(); FragmentManager fm = getSupportFragmentManager(); PessoaDetalheFragment detalhe = (PessoaDetailFragment) fm.findFragmentByTag("detalhe"); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.layoutDetail, PessoaDetailFragment.newInstance(p), "detalhe"); ft.commit(); E tome código!
  11. 91 Threads O que é thread? É uma sequência de

    instruções que pode ser gerenciada de forma independente pelo agendador (sistema operacional). Quando usar? Quando precisamos processar rotinas demoradas. A thread principal não pode ficar “presa” por mais que 5 segundos. Como usar? Vamos ao código!
  12. 92 Handler O que é Handler? Classe utilizada no envio

    de mensagens de outras threads para a thread de UI (principal). Quando usar? Quando precisamos criar ou modificar algum elemento da interface com o usuário a partir de outra thread. Como usar? Vamos ao código!
  13. 93 AsyncTask O que é AsyncTask? É uma abstração da

    utilização de Thread + Handler. Quando usar? Quando precisamos processar rotinas demoradas e criar ou alterar algum elemento da interface com o usuário. Como usar? Vamos ao código!