Android — O que eu aprendi esta semana #2
1. Restringir dígitos em um EditText
Não conhecia o atributo android:digits
. Usando ele, é possível restringir os caracteres que podem ser digitados em um EditText. No caso em questão, só deveriam ser aceitos letras(sem acentos), números e espaços. Desta forma, adicionei a linha abaixo à declaração do EditText:
android:digits="0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz "
O usuário ainda pode visualizar outros caracteres no teclado, no entanto nada acontece ao clicar em algum deles.
2. Manter espaços no strings.xml
Após descobrir como restringir caracteres em um EditText, precisei replicar essa solução em outros campos, então movi a string com os caracteres válidos para o strings.xml:
O efeito imediato foi que os espaços pararam de funcionar. Isso acontece porque o Android naturalmente dá um trim(remove espaços no começo e fim) das strings no arquivo strings.xml. Para manter o espaço lá, é preciso substituí-lo pelo código \u0020
:
Encontrei a solução aqui.
3. Layouts para telas maiores
Essa semana mexi pela primeira vez com pastas de layout do tipo sw<N>dp. Estas pastas contém layouts que são utilizados em telas que disponham de uma largura mínima de N(em unidade de dps). Geralmente são utilizadas para tablets, como neste caso.
O problema em questão é que, ao rodar o aplicativo no tablet, os layouts carregados eram os da pasta padrão, e não os desta pasta especial. Depois de um pouco de investigação, percebemos que o nome da pasta estava incorreto: layout-sw721dp. A ideia era que esses layouts fossem utilizados para telas com largura maior que 720 pixels, porém a largura mínima precisa ser considerada em unidades de dp. Como o tablet se enquadrava na categoria HDPI, a largura mínima de 721 dp equivalia a 1082 pixels(721 x 1.5). O dispositivo não dispunha desta largura no entanto, por isso os layouts não eram carregados. A solução foi renomear a pasta para layout-sw600dp.