Truques no desenvolvimento para Android

Neste post desejo compartilhar algumas soluções de problemas corriqueiros que encontramos  no dia a dia do desenvolvimento de software voltado para o Android.

1- Como adaptar o teclado a sua tela

No Android é comum encontrarmos telas de cadastros com diversos componentes EditText, onde o usuário informara os dados que desejamos armazenar. 

Muitas vezes, quando o usuário esta preenchendo um EditText, o teclado encobre os outros campos da tela que estão embaixo do que o campo que ele esta digitando. Fazendo com que ele tenha que intervir manualmente para fazer o teclado desaparecer, para então ir para o outro item do formulário.

A solução para esse problema é simples, basta reorganizar a tela para comportar o teclado, “arrastando” as Views que nela se encontram para cima. Liberando assim espaço para o teclado em baixo do formulário. Conseguimos fazer isso sem escrever nenhuma linha de código Java. Apenas configurando a nossa Activity.

Segue o link que encontrei a solução para esse problema. 

No AndroidManifest.xml, onde informamos nossas Activitys. Acrescente a seguinte informação na tag da Activity android:windowSoftInputMode=”adjustResize”.

 

Segue um exemplo:

 <activity
            android:name=".CadastroUsuario"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/cadastro"
            android:windowSoftInputMode="adjustResize"
             />

2 – Como substituir o componente Gallery do Android

O componente Gallery do Android foi depreciado des da API 16, pois não consegue gerenciar memória com perfeição.
Por ser um componente utilizado para exibir imagens horizontalmente, e sabendo que exibição de imagens no Android pode resultar na excessão OutOfMemoryException caso não haja controle de memória, esse componente deve ser evitado.
No entanto o Google não ofereceu outro componente que se comporte de maneira igual ao Gallery. Deixou pra galera da comunidade fazer e eles fizeram.

Segue logo abaixo sugestões de bibliotecas que provêm componentes muito semelhantes ao Gallery, e que podem ser utilizados para substitui-lo:

Biblioteca do componente View Flow

Horizontal List View

Testei os dois componentes, e eles resolveram meus problemas com algumas ressalvas.
Os dois componentes não dividem layout com outras Views. O desenvolvedor deve encapsula-lo em um Fragment e referencia-lo no layout desejado, para conseguir montar uma tela com outras Views além do ViewFlow ou HorizontalListView.

A navegação do ViewFlow me gerou alguns problemas, pois o usuário deve passar o dedo de um ponto a ponto para conseguir mudar mudar de View. Como se estivesse trocando de página.

O HorizontalListView é mais sensível, no entanto se na lista tiver botões ou outros elementos que respondem a eventos.
Quando o usuário tentar navegar e sem querer clicar sobre este componente, o evento será disparado.
Ou seja, este componente tem uma certa dificuldade em saber quando o usuário esta navegando entre os elementos da lista, ou quando esta clicando sobre eles.

Uma observação: Ambas as bibliotecas possuem código aberto, e um sistema de exemplo que mostra tudo que elas são capazes.

3 – Como saber o nome e o fabricante do dispositivo que o seu app esta rodando.

O método getDeviceName exposto logo abaixo recupera o modelo e o nome do fabricante do celular no qual esta rodando o aplicativo. Este tipo de informação é interessante, quando um aparelho demonstra um comportamento bem especifico e você precisa trata-lo de maneira distinta aos outros.
É raro dispositivos Android se comportarem muito diferentes um do outro, mas pode acontecer.

	private String getDeviceName() {
		String manufacturer = Build.MANUFACTURER;
		String model = Build.MODEL;

		if (model.startsWith(manufacturer)) {
			return capitalize(model);
		} else {
			return capitalize(manufacturer) + " " + model;
		}
	}


	private String capitalize(String s) {

		if (s == null || s.length() == 0) {
			return "";
		}

		char first = s.charAt(0);

		if (Character.isUpperCase(first)) {
			return s;
		} else {
			return Character.toUpperCase(first) + s.substring(1);
		}

	} 

4 – Como tirar um printscreen da tela do seu Android programaticamente

A resposta desta pergunta foi encontrada neste link do Stack OverFlow.
Ele tira um print da tela e salva a imagem no cartão de memória.

	private void takeAScreenShot() {

		String mPath = Environment.getExternalStorageDirectory().toString() + "/ nomeImagem.png";   				
		View v1 = getWindow().getDecorView();
		v1.setDrawingCacheEnabled(true);
		Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
		v1.setDrawingCacheEnabled(false);

		OutputStream fout = null;
	    File imageFile = new File(mPath);

		try {
		    fout = new FileOutputStream(imageFile);
		    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout);
		    fout.flush();
		    fout.close();

		} catch (FileNotFoundException e) {
		    e.printStackTrace();
		} catch (IOException e) {
		    e.printStackTrace();
		}
	}

5 – Como expandir lateralmente uma Activity no estilo Dialog

Algumas vezes criamos uma Activity no estilo Dialog, pois queremos que a mesma não ocupe toda a tela.
Mas em certos casos é interessante deixar a Activity do tipo Dialog ocupar toda a área lateral do dispositivo.
Para conseguir este efeito basta colocar o código abaixo:

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		preencherTela(getWindow());
	}
	private void preencherTela(Window window) {
		WindowManager.LayoutParams lp = new WindowManager.LayoutParams();	
		lp.copyFrom(window.getAttributes());
		lp.width = WindowManager.LayoutParams.MATCH_PARENT;
		lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
		window.setAttributes(lp);
	}

Chegamos ao final desta dica, mas este post sempre estará crescendo. =]

Anúncios

, , , , , , , , , ,

  1. #1 by Edenilton Oliviveira on Novembro 3, 2014 - 11:10 pm

    Mudou minha vida. Obrigado!! Legal a parte da Activity diálogo!

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

%d bloggers like this: