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

sexta-feira, 22 de fevereiro de 2013

Android: Dicas 8

Olá povo,

Mais um post da série "Dicas de Android", aproveitem! E como sempre, qualquer dúvida ou sugestão deixem seus comentários.

Dica 1 - Crash Report

Essa dica veio de Charles Alves do Curso de Android EAD do CESAR.edu. É possível enviar relatórios de erro da sua aplicação para onde o desenvolvedor desejar através do ACRA (https://github.com/ACRA/acra), por padrão, ele envia para um formulário no google docs.

Dica 2 - Verificar recursos do aparelho.

Através da classe PackageManager podemos verificar se um aparelho conta com um determinado recurso de hardware, como câmera, wi-fi, etc.

PackageManager pm = getPackageManager();
boolean temCamera = 
  pm.hasSystemFeature(
    PackageManager.FEATURE_CAMERA);
boolean temWiFiDirect = 
  pm.hasSystemFeature(
    PackageManager.FEATURE_WIFI_DIRECT);
boolean temScreenPortrait = 
  pm.hasSystemFeature(
    PackageManager.FEATURE_SCREEN_PORTRAIT);

Dica 3 - Mockups pra Android (Dica de Eric Cavalcanti)

Uma ótima ferramenta de prototipagem para Android é o Pencil (http://pencil.evolus.vn). Vale a pena conferir.

Dica 4 - Obtendo o tamanho da tela
Muitas vezes é necessário obter o tamanho da tela. Podemos fazer isso através da classe Display. Ela é retornada pela classe WindowManager que é um serviço do sistema.

Display display = ((WindowManager) 
  getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getWidth();  
int height = display.getHeight();

Dica 5 - Rotação do Emulador 2.3
Um "problema" que eu sempre tinha no emulador do 2.3, era que quando eu girava o emulador para landscape e voltava para portrait, o mesmo continuava em landscape. Para contornar isso, acesse a opção Menu/Settings/Screen e desabilite a opção Autorotate.

Dica 6 - Invertendo os itens da ListView
Podemos fazer com que os itens de uma ListView começem de baixo, basta usar a propriedade android:stackFromBottom="true".

Dica 7 - PopupWindow
Só suportado no Android 3.0 (API Level 11)
public void showPopup(View v) {
    PopupMenu popup = new PopupMenu(this, v);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.actions, popup.getMenu());
    popup.show();
}

Dica 8 - Exibir um vídeo
Dica de Tiago Gomes, aluno da Unibratec. Tocar vídeo da pasta res/raw

VideoView video = (VideoView) 
  findViewById(R.id.videoView1);
Uri uri = Uri.parse("android.resource://" + 
  getPackageName() + "/raw/arquivo_video");
video.setVideoURI(uri);
video.requestFocus();
video.start();

Dica 9 - API para gráficos de "pizza"
Dúvida de Rodrigo Bezerra. Eu nunca usei, mas aparentemente funciona :)
http://www.achartengine.org/

4br4ç05,
nglauber

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

terça-feira, 17 de novembro de 2009

Android: Personalizando os recursos

Olá povo,

Hoje vou falar um poquinho sobre a parte de recursos do Android. Todos os recursos que usamos na nossa aplicação (strings, imagens, cores, layouts, etc.) ficam dentro da pasta "res". Só que cada subdiretório tem um objetivo específico:

  • res/anim: arquivos XML de animações frame-a-frame ou de efeito;
  • res/drawable: arquivos de imagens da aplicação com as extensões .png, .9.png, .jpg;
  • res/layout: arquivos XML com os layouts de telas;
  • res/values: arquivos XML que podem ter os seguintes elementos: string-array (lista de valores), color (definição de cores), string (texto simples) ou style (estilos aplicados à views).
No entanto nós podemos criar variações desses diretórios dependendo da configuração do aparelho. Por exemplo, podemos criar textos em português e inglês para nossa aplicação. Assim, quando o usuário mudar o idioma o texto da aplicação mudaria automaticamente. No Android, basta fazermos o seguinte:

res/values-pt
res/values-en

Pronto! Coloque os textos em português no primeiro diretório e os em inglês no segundo.

Outra possibilidade é criarmos arquivos de layout para resoluções de tela diferentes, seguindo o mesmo princípio:

res/layout-land
res/layout-854x480
res/layout-land-480x320

Se quisermos fazer um layout retrato (portrait) e outro paisagem (landscape para uma tela podemos utilizar a opção "land". Para ter layouts para diferentes tamanhos de tela, basta colocar a resolução da tela passando a [altura]x[largura]. Já na terceira estamos combinando a opção de landscape + tamanho da tela.

E se quisermos que algo mude na nossa aplicação dependendo da operadora? Existe uma numeração que identifica a operadora. Essa numeração é a MCC (Mobile Country Code) e o MNC (Mobile Network Code). E o Android nos permite identificar isso para que nossa aplicação possa ter um comportamento diferente. Para descobrir o MCC e o MNC da operadora podemos utilizar esse código:

TelephonyManager tel = (TelephonyManager) 
  getSystemService(Context.TELEPHONY_SERVICE);
String networkOperator = tel.getSimOperator();

if (networkOperator != null) {

  int mcc = Integer.parseInt(
    networkOperator.substring(0, 3));

  int mnc = Integer.parseInt(
    networkOperator.substring(3));
}


Com o código da operadora, basta colocar o nas suas pastas mcc123-mnc123 (substitua o 123 pelo número encontrado no código acima).

res/drawable-mcc724-mnc31
res/values-mcc724-mnc02

Na pasta acima 724 é o MCC do Brazil e os valores 31 e 02 são da Oi e TIM respectivamente.

Além dessas opções, temos muitas outras que podemos achar aqui.

Resolvi também colocar um screen-shot só da pasta "res" do projeto que eu estou trabalhando.



Mais informações aqui.

4br54ç05,
nglauber