Caso prefira, você encontrará todo esse material, em inglês, no site do Developer Android. A tradução e comentários dos materiais eu faço livremente para ajudar a comunidade que fala português.

quarta-feira, 16 de março de 2011

Interface de Usuários - Controles Compostos e como modificar um View Type existente

Se você não quer criar um componente completamente customizado mas está pensando em criar um componente reusável que consistiria em um grupo de componentes já existentes, então criar um controle composto é a solução. De maneira simples, isso consiste em colocar juntos controles (ou Views) dentro de um grupo lógico de itens que podem ser tratados como uma coisa única. Por exemplo, um combobox pode ser pensado como uma combinação de uma linha única de EditText com um botão adjacente com um PopupList anexado a ele. Se você pressionar o botão e selecionar alguma coisa da lista, ele popula o campo EditText mas o usuário também pode escrever algo diretamente no EditText se ele preferir.

No Android existem, na verdade, duas outras Views que estão disponíveis para fazer a função do combobox: Spinner a AutoCompleteTextView. Mesmo assim, o exemplo do Combobox é um exemplo fácil de se entender.

Para criar um componente composto:

  1. O ponto inicial usual é um layout de algum tipo, então crie uma classe que extenda um layout. Talvez no caso de um Combobox seja melhor usar um layout do tipo LinearLayout com orientação horizontal. Lembre-se que outros layouts podem ser aninhados e dessa maneira o componente composto pode ser complexo e estruturado. Note que assim como toda atividade, você pode usar ou a abordagem declaratica (usando um arquivo XML) ou então você pode aninhar os componentes programaticamente.
  2. No construtor da sua nova classe receba quaisquer parâmetros que a superclasse espera e passe-as para o construtor da superclasse primeiramente. Só então você poderá inserir outras Views a serem usadas no seu novo componente; ou seja, é aqui que você deve criar seu EditText e PopupList. Note que você também pode inserir seus próprios atributos e parâmetros dentro do seu XML que pode ser usado no seu construtor.
  3. Crie os listeners para os eventos que as Views que estão dentro de seu Layout devem requerer como, por exemplo, um método listener para um Click do List Item para fazer o update do conteúdo do EditText se uma seleção de lista é feita.
  4. Crie suas próprias propriedades com acessores e modificadores, por exemplo, para permitir que o valor do EditText seja inicialmente preenchido com um valor que desejar.
  5. No acso de estar extendendo um layout, você não precisa fazer o override dos métodos onDraw() ou do onMeasure() já que o layout terá os comportamentos padrões que vão funcionar. Contudo, você pode fazer o override se achar que deve.
  6. Faça o override em métodos on... que achar necessário, como onKeyDown.
Para sumarizar, o uso de um layout como base para um controle customizável tem vantagens, incluindo:
  • Você pode especificar o layout usando um arquivo XML declarativo assim como com numa tela de atividade ou você pode criar as Views programaticamenet e aninhá-los dentro do layout a partir de seu código.
  • Os métodos onDraw() e onMeasure() vão, na maioria dos casos, ter um comportamento já descrito e você talvez não precise fazer o override deles.
  • No final das contas, você poderá construir controles compostos complexos rapidamente e reutilizá-los como se eles fossem componentes simples.
Modificando um View Type existente

Existe, ainda, uma maneira ainda mais simples de se criar um componente customizado em certas circunstâncias. Se existe um componente que já tem um comportamento similar ao que você deseja mas você quer apenas extender algumas características, você pode simplesmente fazer o override de algum comportamento e pronto. 

0 comentários:

Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
Related Posts Plugin for WordPress, Blogger...