sábado, 13 de agosto de 2011

Mudar cor de ListView

Olá,

Se você estiver cansado daquele fundo preto e daquela cor laranja quando você clica em algum item de um ListView, seus problemas acabaram, abaixo irei mostrar como fazer isso:

Modo antigo:


Modo novo (você utilizando sua criatividade nas cores poderá ficar bem melhor que o exemplo abaixo):

Abaixo segue uma lista com os principais fontes que serão utilizados no exemplo:
list_bg.xml
text_bg.xml
list.xml
main.xml
colors.xml



list_bg.xml
<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:drawable="@color/amarelo" 
        android:state_pressed="false" 
        android:state_selected="false"/>
    <item 
        android:drawable="@color/vermelho" 
        android:state_pressed="true"/>
    <item 
        android:drawable="@color/vermelho" 
        android:state_pressed="false" 
        android:state_selected="true"/>
</selector>

text_bg.xml
<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:color="@color/preto" 
        android:state_pressed="true"/> 
    <item 
        android:color="@color/preto" 
        android:state_focused="true"/> 
    <item 
        android:color="@color/vermelho"/> 
</selector>

list.xml
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_margin="2dp"
    android:background="@color/list_bg">
 
    <TextView
        android:id="@+id/post"
        android:gravity="center_vertical"
        android:layout_height="50dp"
        android:layout_width="wrap_content"
        android:text="20sp"
        android:textColor="@color/text_bg"
        android:textSize="20sp"/> 
 
</RelativeLayout>

main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:smoothScrollbar="true"
        android:clickable="true"
        android:layout_marginBottom="36dp" />
           
</LinearLayout>

colors.xml
<?xml version="1.0" encoding="utf-8"?> 
<resources>
    <color name="blue">#0303ff</color>
    <color name="grey">#f7f7f7</color>
    <color name="verde">#C0E814</color>
    <color name="laranja">#D0640D</color>
    <color name="preto">#000000</color>
    <color name="branco">#FFFFFF</color>
    <color name="vermelho">#FF0000</color>
    <color name="amarelo">#EAEF92</color>
</resources>

Hello3.java
package br.empresa;

import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

 
public class Hello3 extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try
        {
            setContentView(R.layout.main);
            
            String[] litens = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10"};
            ItemsAdapter adapter = new ItemsAdapter(this, litens);
            
            setListAdapter(adapter);
        }catch (Exception e) {
            trace("Erro : " + e.getMessage());
        }   
    }
     
    public void toast (String msg)
    {
        Toast.makeText (getApplicationContext(), msg, Toast.LENGTH_SHORT).show ();
    } 
     
    private void trace (String msg) 
    {
        toast (msg);
    } 
   
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        trace("Item selecionado : " + position);
        super.onListItemClick(l, v, position, id);
    }
    
     
    private class ItemsAdapter extends BaseAdapter 
    {
        String[] items;
  
        public ItemsAdapter(Context context, String[] items) 
        {
            //super(context, textViewResourceId, items);
            this.items = items;
        }
  
        public View getView(int position, View convertView, ViewGroup parent) 
        {
            View v = convertView;
            try
            {
                if (v == null) 
                {
                    LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v = vi.inflate(R.layout.list3, null);
                } 
                TextView post = (TextView)v.findViewById(R.id.post);
                post.setText(items[position]);
            }catch (Exception e) {
                trace("Erro :  " + e.getMessage());
            }
            return v;   
        }
  
        public int getCount() 
        {
            return items.length;
        }
  
        public Object getItem(int position) 
        {
            return items[position];
        }
  
        public long getItemId(int position) 
        {
            return position;
        }
    }
}

Para mudar as cores de seleção da ListView basta inseri-las no arquivo colors.xml e depois chamá-las nos arquivos text_bg ou list_bg de acordo com sua necessidade.

Não postei os demais arquivos como manifest, por exemplo, pois não achei necessário se alguém achar importante é só avisar.


Desenvolvi o jogo Circus Puzzle Free ele é um quebra-cabeça e está publicado no Android Market, agradeço a todos que baixarem, jogarem e comentarem.



Desenv com qualidade!

2 comentários:

Anônimo disse...

seu codigo está cheio de erros. os xml estão dando erro em todos. nada funcionou aqui

Marcio de Souza disse...

Anônimo,

Obrigado, realmente tinha vários erros, não conferi direito na hora de colar o fonte.

Agora está ok!

:)