Arquivo da categoria: Android

Personalizando botões no Android

Neste tutorial, veremos como é possível criar um estilo de botão (button) personalizado para um aplicativo Android. Antes de mais nada, precisamos definir o novo visual para o nosso botão personalizado. Utilizaremos os três estilos abaixo:

“botao01″ – Um estilo para botões com estado habilitado, mas não pressionados.


 

 

 

“botao02″ – Um estilo para botões com estado habilitado e pressionado.

 

 

 

 

“botao03″ – Um estilo para botões com estado desabilitado.

 

 

 

 

Todas estas três imagens personalizadas devem ser colocadas no diretório res/drawable da aplicação Android. Agora, devemos declarar qual imagem deve ser utilizada para cada estado possível do nosso botão personalizado (habilitado, desabilitado…) . Faremos isto declarando um arquivo seletor XML personalizado:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
	android:state_enabled="false"
        android:drawable="@drawable/botao03" />
    <item
    	android:state_pressed="true"
    	android:state_enabled="true"
        android:drawable="@drawable/botao02" />
    <item
    	android:state_focused="true"
    	android:state_enabled="true"
        android:drawable="@drawable/botao02" />
    <item
    	android:state_enabled="true"
        android:drawable="@drawable/botao01" />
</selector>

Cada item é associado a uma imagem e a um estado do botão. Itens devem ser declarados em uma ordem específica.

Vamos colocar nosso arquivo seletor ( chamado btn_custom.xml) na res/drawable da nossa aplicação Android. Agora, é hora de definir um estilo (style) de botão personalizado que poderá ser aplicado a todos os botões da aplicação. Isto pode ser obtido ou com a /res/values/styles.xml ou  /res /values/themes.xml. Vamos personalizar a aparência do botão ( tamanho do texto, cor do texto, sombra, …).

<resources>
    <style name="Button" parent="@android:style/Widget.Button">
        <item name="android:gravity">center_vertical|center_horizontal</item>
        <item name="android:textColor">#FFFFFFFF</item>
        <item name="android:shadowColor">#FF000000</item>
        <item name="android:shadowDx">0</item>
        <item name="android:shadowDy">-1</item>
        <item name="android:shadowRadius">0.2</item>
        <item name="android:textSize">16dip</item>
        <item name="android:textStyle">bold</item>
        <item name="android:background">@drawable/btn_custom</item>
        <item name="android:focusable">true</item>
        <item name="android:clickable">true</item>
    </style>
</resources

Então, definiremos este estilo para ser utilizado pelo botão Widget Android na /res/values/themes.xml:

<style name="CustomButton" parent="android:style/Theme.NoTitleBar">
        <item name="android:buttonStyle">@style/Button</item>
</style>

O tema pode ser aplicado a toda a aplicação, definindo o atributo android:theme na tag<application> do arquivo AndroidManifest.xml.

<application android:icon="@drawable/icon"
    android:label="Custom button"
    android:theme="@style/CustomButton">

Ciclo de vida de uma Activity

Uma Activity é uma classe que herda de android.app.Activity ou suas subclasses. Elas podem interagir com os usuários e solicitar dados ou serviços de outras Activity’s ou Serviços por meio de consultas ou Intenções (discutidas mais adiante). Cada activity (que normalmente correspondem a “telas” de exibição) que é iniciada, fica automaticamente no topo da “activity stack”, ou pilha de atividades, logo, a activity no topo desta pilha é a que está em execução e, normalmente, interagindo com o usuário. As demais, em segundo plano, uma após a outra, de acordo com sua ordem. O sistema operacional tem seus próprios meios para decidir encerrar uma activity,  liberando recursos. O ciclo de vida é exibido de forma esquemática na figura abaixo:

Como podemos visualizar no diagrama, temos os seguintes métodos:

onCreate() : Chamado quando sua Activity é criada. É neste método que normalmente criamos as Views (Exibições) e abrimos qualquer arquivo de dados persistente que a Activity precise utilizar. Ao chamar onCreate, o framework do Android recebe um objeto Bundle que contém qualquer estado de Activity salvo na última execução dessa mesma Activity.

onStart() : É chamada imediatamente após a onCreate. Quando este método concluir sua execução, se for possível que a Activity se torne a Activity de primeiro plano na tela, o controle será transferido para onResume. Caso não possa, por algum motivo, o controle passa para o método onStop.

onResume() : Chamado logo após onStart se sua Activity for a de primeiro plano na tela. Neste ponto do ciclo de vida, a Activity está em execução e interagindo com o usuário. É neste método que a Activity pode iniciar (ou retomar) as ações necessárias para atualizar a interface de usuário (receber atualizações de localizações ou executar uma animação, por exemplo).

onPause() -  Chamado quando o sistema está prestes a retomar uma Activity anterior. É normalmente utilizado para confirmar alterações não salvas, por exemplo, persistência de dados, animações etc. Uma observação importante: a implementação deste método deve ser rápida, porque a próxima Activity não será retomada até que esse método retorne, ou finalize. Vai para onResume() se a activity vai para frente “back to the front”  ou onStop se for tornada invisível para o usuário

onStop() –  Chamado quando a Activity já não está mais visível para o usuário, porque outra Activity foi retomada e está “cobrindo” esta. Isto pode acontecer por um desses motivos: uma nova Acitivity esta sendo criada, a Activity já criada está trazendo outra Activity à frente desta ou se a Activity principal está sendo destruída.  Vai para onRestart() se a Activity está voltando para interagir com o usuário,  vai para onCreate() caso seja criado uma nova activity ou vai para onDestroy() se essa Activity está sendo fechada.

onDestroy() – Destrói a acitivty para liberar espaço em memória. É a última oportunidade para que a sua Activity efetue qualquer processamento antes de ser eliminada. Como já mencionado, este método pode ser chamado porque o Android decidiu que precisa dos recursos que sua Activity está “consumindo”.

É muito importante empregar estes métodos para proporcionar uma melhor experiência de usuário possível. =)

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.