Mostrando postagens com marcador drawable. Mostrar todas as postagens
Mostrando postagens com marcador drawable. Mostrar todas as postagens

domingo, 17 de abril de 2011

Background gradiente no Android

Olá povo,

Post rápido do domingo: como colocar um background gradiente no Android. No diretório res/drawable de um projeto Android podemos colocar arquivos XML também. Esses arquivos devem fazer referências a imagens ou definir formas geométricas como círculos e retângulos. Vejam abaixo como definir um "quadrado" com bordas arredondadas e com cor gradiente.

<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#0000FF"
android:endColor="#000000"
android:angle="90"
android:type="linear" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
<corners
android:radius="30dp" />
</shape>


O arquivo acima, como já dissemos, deve ser criado dentro da pasta res/drawable do seu projeto. Nós o nomeamos como meubg.xml, e nele estamos definindo um retângulo de cor gradiente, começando de azul para preto. O angulo do gradiente é de 90 graus do tipo linear. Determinamos um espaçamento das borda para o componente que utilizar esse arquivo como background. Por fim, determinamos uma borda arredeondada com raio de 30dp.
Se colocarmos esse drawable como background (android:background="@drawable/meubg) de um LinearLayout por exemplo, o resultado ficará como abaixo:



Dúvidas? Consultem a documentação do Android aqui.

4br4ç05,
nglauber

segunda-feira, 23 de agosto de 2010

Android: Usando Reflection para acessar recursos

Olá povo,

Alguns alunos já me perguntaram sobre como obter recursos de uma aplicação Android através do nome do arquivo. Isso pode ser feito através da API de Reflection de Java (pacote java.lang.reflect.*). No exemplo abaixo vou mostrar como obter uma imagem a partir do seu nome.


try {
// Obtém a referência da classe R
Class c = Class.forName("nome.do.pacote.da.app.R");

// Obtém as inner classes: id, layout, drawable, ...
Class[] innerClasses = c.getClasses();

// Procurando inner class drawable
Class drawableClass = null;

for (int i = 0; i < innerClasses.length; i++) {
if (innerClasses[i].getSimpleName()
.equals("drawable")){

drawableClass = innerClasses[i];
break;
}
}
// Procurando o atributo com o nome da imagem
Field f = drawableClass.getField("nome_da_img");

// Obtendo o valor do campo
int resourceId = f.getInt(null);

// Criando uma image view apenas pra exemplificar
ImageView img = new ImageView(context);

// Setando a imagem (recurso) do ImageView
img.setImageResource(resourceId);

} catch (Exception e) {
e.printStackTrace();
}


Como já sabemos, a classe R armazena valores do tipo int que representam os recurso da aplicação. O que fizemos aqui foi obter uma referência para a classe R, depois obter uma referência para a classe interna drawable, e por último, pegar o valor de um dos seus atributos baseados no seu nome.
Podemos fazer isso para as demais classes como id, layout, etc.

4br4ç05,
nglauber