Olá povo,
Depois de um bom tempo, um novo post da série "Dicas de Android". Espero que gostem ;)
1. Aplicando um background para toda a aplicação
Primeiro precisamos criar uma extensão do estilo que está sendo utilizado na aplicação. Você pode fazer isso criando o arquivo styles.xml na pasta values e deixando-o conforme abaixo:
<resources>
<style name="MeuTemaPersonalizado"
android:parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">
@drawable/sua_imagem_de_bg
</item>
</style>
</resources>
Depois, é só utilizar o estilo criado na tag
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/MeuTemaPersonalizado">
2. Deixando os nomes dos parâmetros corretos no Eclipse
No Eclipse, clique com o botão direito sobre o projeto e selecione
Properties. No lado esquerdo, selecione
Java Build Path, e em seguida, selecione a aba
Libraries. Aqui você deve expandir a versão do Android que você está utilizando (2.3.3 por exemplo), e depois expandir o android.jar. Serão exibidos alguns subitens, entre eles, o Javadoc location. Basta clicar em
Edit... e informar o local onde está a documentação do Android (até a pasta
docs/reference). Depois é só clicar em
Validate e pronto! Agora o Javadoc aparecerá no editor e nas classes/interfaces do Android que você herdar/implementar.
3. Bloqueando a Home key
Desde sempre dizia que não dava para bloquear a Home até que meu colega
Rodrigo Barbosa precisou fazer isso e resolveu compartilhar aqui no blog. Basta colocar o método abaixo na sua Activity.
@Override
public void onAttachedToWindow() {
this.getWindow().setType(
WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
4. Lendo XML com a Biblioteca Simple XML
Apesar de ser adepto do "Do it yourself", algumas pessoas preferem as facilidades das bibliotecas. Recebi essa dica de
Rafael Cavalcanti, que me indicou a
Simple XML Serialization que facilita a leitura de arquivos XML. Ele converte automaticamente os elementos do arquivo XML em Objetos e Atributos de uma classe utilizando apenas anotações.
Abaixo um tutorial no próprio site do desenvolvedor:
http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php
Mas para não deixar de mostrar alguma coisa aqui... Baixe o JAR da biblioteca e adicione ao Build Path do projeto.
@Root
class Carros {
@ElementList(inline=true)
public List<Carro> list;
}
@Root
class Carro {
@Element
public String nome;
@Element
public String desc;
@Element
public String url_info;
@Element
public String url_foto;
}
Para ler
esse XML do
livro do Ricardo Lecheta era só fazer isso...
URL url = new URL(
"http://livroandroid.com.br/"+
"livro/carros/carros_esportivos.xml");
HttpURLConnection conexao = (HttpURLConnection)
url.openConnection();
Serializer serializer = new Persister();
Carros example = serializer.read(
Carros.class, conexao.getInputStream());
for (Carro carro : example.list) {
Log.d("NGVL", "Carro:" + carro.nome);
}
5. Personalizando Links do Android
A classe TextView tem a propriedade AutoLink (android:autoLink) que cria detecta links automaticamente no texto que está sendo exibido. Esses links podem abrir o navegador, cliente de email e o discador do aparelho. Mas e se quisermos fazer um link para abrir uma Activity nossa?
A classe Linkify permite criar links baseados em uma expressão regular.
TextView txt1 = (TextView)findViewById(R.id.textView1);
txt1.setText("Testando esse CEP 55555-4444");
// Zip code dos EUA
Pattern pattern = Pattern.compile(
"\\d{5}([\\-]\\d{4})?");
String scheme = "glauber://";
Linkify.addLinks(txt1, pattern, scheme);
Notem que foi passado o esquema glauber:// Para fazer com que uma Activity nossa responda a chamadas a esse "protocolo" é só adicionar uma
na declaração da Activity no AndroidManifest.xml
<activity
android:name="ActivityQueSeraChamada"
android:label="@string/app_name" >
<intent-filter>
<action
android:name="android.intent.action.VIEW"/>
<category
android:name="android.intent.category.DEFAULT"/>
<data android:scheme="glauber"/>
</intent-filter>
</activity>
Para obter o valor do link clicado, basta usar
getIntent().getDataString(). Isso retornará
"glauber://55555-4444"
6. TableLayout e a propriedade layout_span
Estava querendo fazer um exemplo de TableLayout similar ao abaixo na minha última aula do
TECDAM:
Uma característica do TableLayout é que cada linha é uma TableRow e cada coluna é um componente, que no caso acima, são TextViews, EditText e Checkboxes. Eu utilizei para a segunda coluna, a propriedade
android:stretch_columns que informa quais colunas devem ser esticadas.
Porém, se você observar, a linha de cima tem 2 colunas, enquanto que a de baixo tem 3, foi aí que achei a propriedade
android:layout_span (que é bem similar a do HTML) e informa quanto uma coluna irá expandir e criar uma nova coluna. Vejam como ficou o código do layout acima.
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:stretchColumns="1,2" >
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nome" />
<EditText
android:id="@+id/editText1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_span="2" />
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Avisos por:" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Email" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Telefone" />
</TableRow>
</TableLayout>
É isso pessoal, qualquer dúvida, deixem seus comentários.
4br4ç05,
nglauber