HighLight em um linha no ListView do Android (Colorir linha com Drawable)

Quando desenvolvemos nossas aplicações Android, sempre queremos fazer uma interface amigável e agradável para o usuário. Um recurso muito utilizado pelos desenvolvedores é o uso de cores para representar situações. Neste post iremos mostrar como colorir uma linha de uma ListView do Android quando a linha for selecionada.

Para aplicar este efeito, devemos utilizar um recurso Drawable do Android. Um Drawable é um desenhável que permite alterar a aparência de um componente Android. Neste post, iremos alterar o background de uma linha quando ela for clicada.

Uma dica a mais deste post será a criação de um Drawable que irá colorir a linha seleciona mas com um Gradient. Um gradient é quando a textura começa com uma cor e finaliza com outra cor. Desta forma, teremos uma linha selecionada com cores em Gradient.

Para criar o gradient faça:

1. Crie uma pasta chamada drawable no seu projeto dentro da pasta /res

2. Crie um xml dentro desta pasta chamado active_row.xml. Dentro deste arquivo você irá criar um shape para definir um gradient começando com a cor amarela (#44FFFF00) e terminando com a cor branca (#FFFFFF00) em um ângulo de cima para baixo (270 graus).

shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
gradient
android:startColor="#44FFFF00"
android:endColor="#FFFFFF00"
android:angle="270"

/shape

Para aplicar o Drawable Gradient no seu ListView faça:

1. Crie seu ListView normalmente

2. Dentro da sua activity crie um listener de AdapterView.OnItemClickListener. Este listener irá escutar os eventos de click na linha do ListView. Quando você clicar em uma linha, este listener irá armazenar a linha clicada e trocar a cor do BackgroundResource aplicando o Drawble e pegando a linha anteriormente clicada e voltando para a cor original.

3. No ponto do seu código onde você colocou o Adapter para sua ListView, atribua o click listener criado para sua ListView.

public class MainActivity extends ListActivity {

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final ListView lv = getListView();

lv.setTextFilterEnabled(true);
lv.setSelected(true);

ListAdapter adapter = new SimpleAdapter(context, myList,
R.layout.listplaceholder, new String[] { "name", "Score" },
new int[] { R.id.item_title, R.id.item_subtitle });

setListAdapter(adapter);

getListView().setOnItemClickListener(listener);

}

AdapterView.OnItemClickListener listener = new     AdapterView.OnItemClickListener() {

View lastRow = null;

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {

if (lastRow != null) {
lastRow.setBackgroundColor(0x00000000);
}

arg1.setBackgroundResource(R.drawable.active_row);
lastRow = arg1;
}
};

}

Se você quiser saber mais sobre programação Java, .Net, Android, IOS, Banco de Dados, Análise de Sistemas, Pontos de Função, faça nossos treinamentos e conheça a Framework Training Center – Comprometimento em Qualidade de Ensino.

 

1 Comment

  • Daian Henz Posted 09/06/2013 11:32

    Bom post! Mas nos próximos ajudaria ainda mais se o código estivesse identado.

Add Comment

Your email address will not be published. Required fields are marked *

Phone: (31) 3646-1612
Fax: (31) 3646-1614
Loja 01, Lourdes, Belo Horizonte/MG
Rua Rio de Janeiro, 1278