segunda-feira, 11 de abril de 2011

Android: Dicas 2

Olá povo,

Estar à frente de uma sala de aula me propicia o benefício da "ensinagem" (ensino + apredizagem) onde ao mesmo tempo em que ensino, aprendo bastante com meu alunos. Esse post foi totalmente formado por dúvidas dos meu alunos do TECDAM, e que foram resolvidos por eles próprios. Bom para todos, que aprendemos juntos.

Dica 1 (crédito para Gustavo - olha ele aí - Coutinho)
O Android tem um sistema de i18n (internacionalização) muito bacana, onde basta prover recursos através de notações pré-definidas pelo próprio Android em pastas do projeto. Inclusive falei disso nesse post. Os recursos são selecionados automaticamente de acordo com configurações do aparelho. Mas, e se eu quiser determinar o idioma da aplicação? Segue abaixo o código que força um idioma para nossa aplicação.


String languageToLoad = "es"; // espanhol
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
Resources res = getBaseContext().getResources();
res.updateConfiguration(config, res.getDisplayMetrics());
setContentView(R.layout.main);


Dica 2 (crédito para Rogério Casal, aluno do Unibratec)
Nesse post, mostrei como limitar os caracteres utilizando expressões regulares. Porém, podemos fazer a mesma coisa utilizando a propriedade digits do componente EditText, basta colocar os caracteres que você quer permitir.

Dica 3 (crédito para Augusta "Nariquinha")
É comum colocarmos os identificadores dos componentes adicionados nos arquivos de layout utilizando @+id/idDoComponente. Entretanto, quando ficamos com muitas telas ou quando começamos a importar layouts pode haver uma confusão ou até um conflito com esses identificadores. Uma abordagem legal, seria substituir o "id" por algo mais inteligível como "cadpessoa". Por exemplo a definição do EditText abaixo seria perfeitamente válida:
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+cadpessoa/edtNome"/>

E no código Java, poderíamos acessar esse id usando:
EditText edt = 
(EditText)findViewById(R.cadpessoa.edtNome);


Dica 4 (crédito para Leonardo Santos)
Essa eu não arrumei uma justificativa plausível. Quando fui executar um arquivo MP3 no emulador o código abaixo funcionou perfeitamente.
MediaPlayer player = new MediaPlayer();
player.setDataSource("file:///mnt/sdcard/musica.mp3");
player.prepare();
player.start();

Porém, quando coloquei no telefone não funcionou. O erro "Playing Audio - error: PVMFErrNotSupported (Prepare failed.: status=0x1)" era exibido. Após uma busca rápida no Google, a solução foi simples. Ao invés de passar a String diretamente, é passado um objeto FileDescriptor obtido através de um FileInputStream como abaixo.
MediaPlayer player = new MediaPlayer();
FileInputStream fis =
new FileInputStream("/sdcard/musica.mp3");
player.setDataSource(fis.getFD());
player.prepare();
player.start();

Como disse acima, não sei o porquê do erro.

Dica 5 (crédito para Pedro CC)
Para gerar a chave para utilizar a API do Google Maps no Android é preciso usar a ferramenta keytool que vem no JDK (Java Development Kit). Porém, um problema que acontecia constantemente quando ia gerar essa chave era a mensagem "erro de keytool: java.lang.IllegalArgumentException: unknown format type at". Ou seja, erro sem explicação... Esse problema ocorre aparentemente por conta das configurações regionais. Quando elas estão em português, esse erro acontece, em inglês não.
No Windows, vá até o Painel de Controle, e em Configurações Regionais altere o formato das informações para inglês. No Mac vá até System Preferences, em seguida selecione Language e Text, na aba Formats selecione Inglês. [Editado com o comment de Eric Braga] No Linux, basta setar a variável de ambiente LC_ALL usando (export LC_ALL="en_US").

Dica 6 (crédito para Ricardo Gilson)
Se quiser fazer com que cada atributo de cada tag de um arquivo XML fique em uma linha separada no Eclipse, acesse o menu
Windows>Preferences>XML>XML Files>Editor e marque a opção "Split multiple attributes each on a new line". Depois é só abrir seus arquivos de Layout e pressionar Ctrl+Shift+F para que o arquivo fique bem mais agradável.

Agradeço a todos pelas dicas e se dei os créditos errado ou faltou alguém é só avisar :)

4br4ç05,
nglauber

2 comentários:

Eric Braga disse...

No Linux
LC_ALL=en_US
e depois é só fazer o processo normal

Bruno Bourbon disse...

Na dica 5. O problema pode ocorrer se o aparelho entender que "file:///" é uma URI de streaming de audio em vez de um arquivo.
Esse comportamento pode variar conforme o aparelho.