Mostrando postagens com marcador Tamanho da Tela. Mostrar todas as postagens
Mostrando postagens com marcador Tamanho da Tela. Mostrar todas as postagens

segunda-feira, 5 de dezembro de 2011

Resoluções de Tela

Olá povo,

Frequentemente nas aulas de Android o pessoal tem dificuldade de lembrar as diversas resoluções de tela disponíveis para os smartphones e tablets atuais. Hoje meu colega de trabalho André mandou uma imagem com os tamanhos e siglas que as representam.

No Android, a grande maioria dos dispositivos utilizam as resoluções: QVGA, HVGA, WVGA e WXGA.

4br4ç05,
nglauber

Fonte: http://samuelvarela.wordpress.com/2009/03/20/resolucao-de-tela-vga-qvga-etc/

quinta-feira, 20 de outubro de 2011

Android: Dicas 5

Olá povo,

Esse é mais um post da série de dicas de Android. Aproveitem e deixem seus comentários :)

Dica 1 - Alterando a fonte dos componentes
O Android, por padrão, tem apenas 3 fontes que podem ser utilizadas nos componentes visuais: sans, serif e monospace. Para utilizar cada uma delas, basta atribuir o valor desejado à propriedade android:typeface. Mas se quiser utilizar uma nova fonte, basta adicionar o arquivo *.ttf na pasta assets e carregá-la utilizando o código abaixo.
Typeface typeface =
Typeface.createFromAsset(getAssets(), "Aliens.ttf");

TextView txt = (TextView)findViewById(R.id.textView1);
txt.setTypeface(typeface);

Infelizmente, não achei uma forma de setar essa fonte no XML. Se alguém souber, deixe um comentário. Ah! A fonte que usei nesse exemplo foi baixada do site http://www.webpagepublicity.com/free-fonts.html.

Dica 2 - Converter DIP (Density Independent Pixel) para Pixel
Após ministrar duas aulas seguidas (em turmas diferentes) sobre Views personalizadas no Android, uma dúvida frequente foi como converter DIP para PX (pixel). Isso é especialmente útil para que a View rode corretamente em diferentes densidades de tela (LDPI, MDPI, HDPI e agora XHDPI). Para tal, pode-se utilizar o método applyDimension da classe TypeValue.
Resources r = getResources();
float valorEmDp = 14;
float valorEmPixels = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, valorEmDp,
r.getDisplayMetrics());


Dica 3 - Evitando acumular Toasts
Um "bug" clássico que os engenheiros de teste do projeto em que eu trabalho levantam é sobre a utilização do Toast. Se você chamar o método show() dessa classe várias vezes seguidas, essas mensagens são acumuladas e ficam sendo exibidas sequencialmente. Um recurso que utilizo é criar um método separado, que verificará se já existe um Toast aberto, em caso positivo, ele o cancela para exibir um novo. Para tal, você deve criar um atributo da classe Toast (que abaixo chamo de 'toast') e utilizar o seguinte código:
// Declare o atributo
private static Toast toast;

// Método
public static void showToast(Context ctx, int res){
if (toast != null){
toast.cancel();
toast.setText(res);
} else {
toast = Toast.makeText(ctx, res, Toast.LENGTH_LONG);
}
toast.show();
}


Dica 4 - Definindo onde instalar sua aplicação
A partir da versão 2.2 (Froyo) é possível especificar onde sua aplicação pode ser instalada: cartão de memória ou memória interna. Por padrão, a aplicação será instalada na memória interna, mas você pode utilizar a propriedade android:installLocation da tag <manifest> do AndroidManifest.xml para um dos valores abaixo:
internalOnly - A aplicação só poderá ser instalada na memória interna (valor padrão).
auto - A aplicação é instalada na memória interna, mas poderá ser movida para o cartão de memória posteriormente ou quando a memória interna estiver cheia.
preferExternal - A aplicação deve ser instalada no cartão de memória preferencialmente, mas isso não é garantido.

Exemplo:
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="preferExternal"
... >


Dica 5: Ativar/Acender a tela do aparelho
Neste post eu mostrei como criar notificações no Android. Um recurso que pode ser utilizado juntamente com as notificações é acender/ligar a tela do aparelho. Para fazer isso, deve-se utilizar a classe PowerManager.

// Obtém a instância do PowerManager
PowerManager pm = (PowerManager)c.getSystemService(
Context.POWER_SERVICE);

// Liga o display do aparelho
WakeLock wakeLock = pm.newWakeLock(
// Liga a tela
PowerManager.SCREEN_DIM_WAKE_LOCK |
// Após liberar a tela para apagar,
// mantém a tela ligada por um pouco
// mais de tempo
PowerManager.ON_AFTER_RELEASE,
// Tag para debug
"tag_para_debug");

// Liga a tela por 10 segundos
wakeLock.acquire(10000);


Para usar o código acima, deve-se adicionar a permissão WAKE_LOCK no AndroidManifest.xml.
<uses-permission name="android.permission.WAKE_LOCK"/>


Dica 6: debug.keystore expirou

Essa dica foi enviada pelo meu colega Ricardo Gilson.
Toda aplicação Android é assinada para ser instalada no dispositivo, por padrão, ela é assinada com uma assinatura de debug através do arquivo debug.keystore que fica na subpasta ".android" no diretório do usuário (C:\Users\usuario\.android ou /Users/usuario/.android). Depois de um certo tempo sem utilizar a máquina, a mensagem abaixo pode ser exibida ao tentar rodar uma aplicação:

Error generating final archive: Debug Certificate expired on 24/09/2011.

Para resolver o problema é só apagar o arquivo debug.keystore, dar um clean no projeto do Eclipse (menu Project > Clean) e tentar rodar novamente.

Dica 7: Habilite a aceleração de Hardware (por Fernado Fragoso)
Habilitar a aceleração de hardware quando necessitar de manipulação de imagens, adicionar na tag application do AndroidManifest.xml.

android:hardwareAccelerated="true"

Faz uma diferença gigantesca! Valeu Fernando!

Por hoje é só, qualquer dúvida ou sugestão, deixem seus comentários.

4br4ç05,
nglauber

segunda-feira, 20 de junho de 2011

Android: Dicas 3

Olá povo,

Meus alunos, mesmo após o fim das aulas, não me deixam em paz. E isso é bom ;) Eles ficam mandando dúvidas e soluções para problemas em que eles se deparam no dia-a-dia do desenvolvimento com Android. Sendo assim, lá vai mais uma leva de dicas de Android.

Dica 1 (dúvida de Felipe Bonezi)

A dúvida era como obter o tamanho da tela. Segue abaixo:
Display display = 
getWindowManager().getDefaultDisplay();

int width = display.getWidth();
int height = display.getHeight();


Dica 2 (dica de Bruno Baudel)

Ocultar o teclado virtual programaticamente.
InputMethodManager imm = (InputMethodManager) 
getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);


Dica 3 (dica de Felipe Vasconcelos)

Essa é a mais complicada de todas. Como modificar o background das abas de um TabHost. A primeira coisa que devemos ter são as imagens das abas. Se você não diver, crie no XML mesmo :) segue abaixo os XML para aba selecionada e normal, salve-os na pasta res/drawable com os nomes aba_normal.xml e aba_normal.xml.

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

<gradient
android:startColor="#000000"
android:endColor="#CCCCCC"
android:angle="90"
android:type="linear" />
<padding
android:left="10dp"
android:top="10dp" />
<corners
android:topLeftRadius="15dp"
android:topRightRadius="15dp" />
</shape>

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

<gradient
android:startColor="#000000"
android:endColor="#00FF00"
android:angle="90"
android:type="linear" />
<padding
android:left="10dp"
android:top="10dp" />
<corners
android:topLeftRadius="15dp"
android:topRightRadius="15dp" />
</shape>

Uma vez definida as imagens, precisamos associa-las ao estado da TabWidget, ou seja, quando a aba estiver selecionada, use a segunda imagem, caso contrário use a primeira. Crie o arquivo aba_selector também na pasta res/drawable.
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_selected="true"
android:drawable="@drawable/aba_selecionada" />
<item
android:state_selected="false"
android:drawable="@drawable/aba_normal" />
</selector>

Depois é só setar o background de cada aba do TabWidget.
TabWidget tabWidget = getTabWidget();
for (int i = 0; i < tabWidget.getChildCount(); i++) {
View v = tabWidget.getChildAt(i);
v.setBackgroundDrawable(
getResources().getDrawable(R.drawable.aba_selector));
}



Dica 4 (dica de Ricardo Gilson)

Sem mais aguentar a linha "TODO" que é adicionada toda vez que criamos algum tipo de bloco ou método no Eclipse, Ricardo foi em busca de como retirá-lo. A solução é ir até o menu Window > Preferences... No lado esquerdo, selecione Java > Code style > Code templates. Ao percorrer a lista é possível observar que o TODO está configurado para várias chamadas:
Method body, Construtor body, Catch....

O jeito é remover a linha do TODO de cada um deles...
// ${todo} Auto-generated catch block.


É isso pessoal, vão mandando suas dicas que eu coloco aqui! :)
Obrigado a todos que contribuíram.

4br4ç05,
nglauber