View
3.067
Download
6
Category
Preview:
Citation preview
Componentização e
padrões de
projeto e interface
em Android
Welington Silva
welington.silva@cesar.org.br
O que?
• {Agregado} de view(s)
• Customizável ou não
16/02/2012 Componentização e padrões de projeto e interface 3
Por que?
• Facilita a utilização
• Forma de reuso
• Evita duplicação de código
• Concentra a lógica
• Facilita a manutenção
16/02/2012 Componentização e padrões de projeto e interface 4
Quando?
• Aparição recorrente na tela
– Muitos recursos (Imagens, fontes, etc.)
– Muitas telas
– Detalhes de design
– Mesma aparência, configuração
16/02/2012 Componentização e padrões de projeto e interface 5
Como?
• Crie o layout (se necessário)
• Crie a respectiva classe do componente
– Ex.: MyComponent.java
– Infle o layout criado no construtor
– Faça as inicializações e customizações necessárias
– Faça os métodos para controle do seu componente
16/02/2012 Componentização e padrões de projeto e interface 6
Como? Exemplo[0]
• Agregador de botões
button_host_layout.xml
16/02/2012 Componentização e padrões de projeto e interface 7
<LinearLayout
android:id="@+idButtonHost/buttonHost"
android:layout_width="135px"
android:layout_height="334px"
android:orientation="vertical"
android:gravity="center_horizontal|bottom"
android:background="@drawable/fundo_host"
android:padding="2px”
>
</LinearLayout>
Como? Exemplo[1]
ButtonHostComponent.java
16/02/2012 Componentização e padrões de projeto e interface 8
public ButtonSetComponent(Context context) {
super(context);
this.context = context;
inflateLayout();
}
public ButtonSetComponent(Context context,
AttributeSet attrs) {
super(context, attrs);
this.context = context;
inflateLayout();
}
Como? Exemplo[2]
16/02/2012 Componentização e padrões de projeto e interface 9
private void inflateLayout() {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.button_host_layout, this);
}
public Button addButton(int resStringId, int resBgId,
View.OnClickListener listener) {
Button button = new Button(context);
button.setText(context.getText(resStringId));
button.setBackgroundResource(resBgId);
button.setOnClickListener(listener);
return button;
}
Como? Exemplo[3]
• Incluindo no layout
16/02/2012 Componentização e padrões de projeto e interface 10
<br.example.component.ButtonHostComponent
android:id="@+idMyActivity/buttonHost"
android:layout_width="wrap_content"
android:layout_height=“wrap_content "
/>
Nome completo do pacote
Identificando o componente
Como? Exemplo[4]
• Instanciando
• Recuperando
• Utilizando
16/02/2012 Componentização e padrões de projeto e interface 11
ButtonHostComponent bhc = new
ButtonHostComponent(MyActivity.this);
bhc.addButton(R.string.label, R.drawable.bg,
listener);
ButtonSetComponent b = (ButtonSetComponent)
findViewById(R.idMyActivity.buttonHost);
Definição
” Solução genérica e repetível
para problemas comumente recorrentes”
16/02/2012 Componentização e padrões de projeto e interface 13
Listener (Observer)
Objetos registram seu interesse
em ser notificados em caso de alguma mudança ocorridas em outros objetos
16/02/2012 Componentização e padrões de projeto e interface 14
source listener
1
Factory
Interface de criação de objetos
relacionados ou dependentes,
sem especificar suas classes concretas
16/02/2012 Componentização e padrões de projeto e interface 15
Quais?
• Dashboard
• Action Bar
• Search Bar
• Quick Actions
• Companion Widgets
16/02/2012 Componentização e padrões de projeto e interface 17
Dashboard
16/02/2012 Componentização e padrões de projeto e interface 18
• Revela funções
• Destaca conteúdo
• Tela toda
• Organizada por
– Função, categoria ou perfil
Action Bar
16/02/2012 Componentização e padrões de projeto e interface 19
• Navegação
• Operações usadas com frequência
• Topo da tela
• Geralmente oferece
– Busca, atualização, criação, retorno para o dashboard
Quick Action
16/02/2012 Componentização e padrões de projeto e interface 20
• “Pop-up” com funções disponíveis
• Ações explícitas, bem objetivas
• “Fast & Fun”
Search Bar
16/02/2012 Componentização e padrões de projeto e interface 21
• Busca (... Não me diga!)
• Substitui action bar, se houver
• Autocompletar
Companion widget
16/02/2012 Componentização e padrões de projeto e interface 22
• Conteúdo da aplicação na tela inicial
• Tela inicial personalizada
Recommended