Android-dev.it Community

 
Annunci

:arrow: Benvenuto!, se non sei ancora un utente registrato: puoi registrati qui, oppure effettua il login
:arrow: Apri un forum sul tuo nuovo smartphone Android e collabora con noi! (dettagli)

www.agendadigitale.org
Image


Sponsor
It is currently Fri May 18, 2012 5:41 pm

All times are UTC + 1 hour


 Topics   Replies   Views   Last post 
No new posts Apri un forum sul tuo nuovo smartphone Android!

[ Go to page: 1, 2, 3 ]

by ReattileGar on Fri May 18, 2012 5:27 pm in Amministrazione

27

12411

Fri May 18, 2012 5:27 pm

ReattileGar

No new posts Новый: базы для хрумера - профессиональный софт для СЕО.

by Renatafe on Fri May 18, 2012 3:14 pm in Amministrazione

0

3

Fri May 18, 2012 3:14 pm

Renatafe

No new posts Pace is undoubtedly the vital affordable Jerseys Wholesale d

by barnettmmolive2012 on Wed May 16, 2012 7:36 am in Amministrazione

1

44

Wed May 16, 2012 7:36 am

barnettmmolive2012

No new posts Problema di compatibilità app

by deran on Tue May 15, 2012 10:44 am in Sviluppo e programmazione in Android

4

186

Tue May 15, 2012 10:44 am

deran

No new posts Applicazione inserimento eventi

by mauro21 on Mon May 14, 2012 9:20 pm in Sviluppo e programmazione in Android

0

23

Mon May 14, 2012 9:20 pm

mauro21




Post new topic Reply to topic  [ 9 posts ] 
Author Message
 Post subject: Cambiare colore elementi listView on focus e on click
PostPosted: Mon Nov 22, 2010 9:57 am 
Offline
User avatar

Joined: Mon Nov 22, 2010 9:35 am
Posts: 4
Cellulare Android: HTC Tattoo
Operatore: Wind
Punti Android: 0
Salve ragazzi,
ho una listView nella mia app (questo è il suo layout xml, list_layout.xml):
Code:
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/arrayList"
   android:layout_width="fill_parent" android:layout_height="fill_parent"         
   android:textFilterEnabled="true"
   android:scrollbars="vertical"
   android:drawSelectorOnTop="true"></ListView>


Ogni elemento della mia listView è composto da due textView (questo è il layout dell'elemento i-esimo della lista, custom_row.xml):


Code:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout android:layout_width="fill_parent"
   xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/row_container"
   android:padding="5px" android:layout_height="wrap_content"
   android:background="@color/white" android:shrinkColumns="0">
      <TableRow>
      <TextView android:layout_height="wrap_content"
         android:layout_width="wrap_content" android:layout_below="@+id/description"
         android:id="@+id/description"
         android:textColor="@color/black"         
         android:scrollHorizontally="true"
         android:singleLine="true"></TextView>      
   </TableRow>
   <TableRow>
      <TextView android:layout_width="wrap_content"
         android:layout_height="wrap_content" android:id="@+id/result"
         android:textColor="@color/grey"
         android:maxLines="1"
         android:scrollHorizontally="true"></TextView>                  
   </TableRow>

</TableLayout>


Ho quindi creato una activity, per la visualizzazione della mia lista, settando come layout appunto quello definito dal file list_layout.xml e utilizzando un arrayAdapter per gestire il contenuto della mia lista (Matches.java):

Code:
public class Matches extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);       
        //set layout
               
        setContentView(R.layout.list_layout);
      // obtain reference to listview
      ListView listView = (ListView) findViewById(R.id.arrayList);
      //listView.setBackgroundResource(R.drawable.list_selector);
      
      ArrayAdapter<Match> arrayAdapter = new ArrayAdapter<Match>(
            this, R.layout.custom_row, R.id.description, createItems()) {
         
         @Override
         public View getView (int position, View convertView, ViewGroup parent){
            Match item = getItem (position);
            LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View rowView = inflater.inflate(R.layout.custom_row, null);
            TextView description = (TextView)rowView.findViewById(R.id.description);
            TextView result = (TextView)rowView.findViewById(R.id.result);
            description.setText(item.description + "  Risultato: " + item.result );
            result.setText(item.date + "  " + item.hour);
            return rowView;
         }
      };
      
      listView.setAdapter(arrayAdapter);


...

La mia domanda è: come posso fare in modo di modificare il colore di background (ed eventualmente anche il colore del testo) degli elementi della lista al click e al focus?
Quello che accade è che, selezionando o cliccando un elemento della lista, gli viene dato un colore di background di default (arancio), impedendo la visualizzazione del testo .. :bang:
Spero di essere stato chiaro, chiedetemi pure ogni altro chiarimento
Grazie per l'aiuto :wave:


Top
 Profile  
 
 Post subject: Re: Cambiare colore elementi listView on focus e on click
PostPosted: Mon Nov 22, 2010 11:37 am 
Offline
User avatar

Joined: Thu Dec 27, 2007 7:09 pm
Posts: 659
Cellulare Android: HTC Dream
Operatore: TIM
Punti Android: 758
Ciao,
sì anche a me lo sfondo arancione degli item di una ListView quando sono selezionati non piaceva... puoi cambiarlo specificando l'attributo android:listSelector nel file xml, ad sempio:
Code:
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/arrayList"
   android:layout_width="fill_parent" android:layout_height="fill_parent"         
   android:textFilterEnabled="true"
   android:scrollbars="vertical"
   android:drawSelectorOnTop="true"
   android:listSelector="@drawable/list_selector_background"></ListView>


Nell'esempio si associa un'immagine di sfondo (list_selector_background), ma puoi anche specificare semplicemente un colore oppure un Selector vero e proprio, che potrà essere definito ad esempio in questo modo:
Code:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_enabled="false" android:state_focused="true"
        android:drawable="@drawable/item_disabled" />
  <item android:state_pressed="true"
        android:drawable="@drawable/item_pressed" />
  <item android:state_focused="true"
        android:drawable="@drawable/item_focused" />
</selector>

_________________
***URLs are hidden from guests, please register and login to view the hyperlink***


Top
 Profile  
 
 Post subject: Re: Cambiare colore elementi listView on focus e on click
PostPosted: Mon Nov 22, 2010 12:18 pm 
Offline
User avatar

Joined: Mon Nov 22, 2010 9:35 am
Posts: 4
Cellulare Android: HTC Tattoo
Operatore: Wind
Punti Android: 0
Grazie per il suggerimento, provo la tua idea e ti faccio sapere... ;)

In questo modo, utilizzando un selector, cambierei il colore di sfondo dell'elemento della listview (giusto??).. se io volessi, ad esempio, cambiare anche il colore del testo ?


Top
 Profile  
 
 Post subject: Re: Cambiare colore elementi listView on focus e on click
PostPosted: Mon Nov 22, 2010 3:17 pm 
Offline
Moderatore
User avatar

Joined: Thu Dec 27, 2007 3:51 pm
Posts: 986
Cellulare Android: HTC Dream
Operatore: TIM
Punti Android: 1320
nolano wrote:
Grazie per il suggerimento, provo la tua idea e ti faccio sapere... ;)
In questo modo, utilizzando un selector, cambierei il colore di sfondo dell'elemento della listview (giusto??).. se io volessi, ad esempio, cambiare anche il colore del testo ?

sì esatto.
Se vuoi specificare un colore per il testo, credo che sia sufficiente usare l'attributo android:textColor nel file XML, ad esempio:
Code:
android:textColor="@color/black" ="@color/black"


Se invece vuoi specificare un colore diverso per l'item che viene selezionato dall'utente, lo puoi fare "programmatically" selezionando l'item con SetPosition e richiamando il metodo SetColorText (ciascuna riga di una ListView è una view anch'essa)


Top
 Profile  
 
 Post subject: Re: Cambiare colore elementi listView on focus e on click
PostPosted: Mon Nov 22, 2010 11:03 pm 
Offline
User avatar

Joined: Mon Nov 22, 2010 9:35 am
Posts: 4
Cellulare Android: HTC Tattoo
Operatore: Wind
Punti Android: 0
Ciao,
ho creato, come mi hai detto (almeno spero :? ).. il file contenente il selector (list_selector.xml):

Code:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_enabled="false" android:state_focused="true"
        android:drawable="@color/green" />
  <item android:state_pressed="true"
        android:drawable="@color/green" />
  <item android:state_focused="true"
        android:drawable="@color/green" />
</selector>


e l'ho associato alla mia listView, in questo modo:

Code:
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/arrayList"
   android:layout_width="fill_parent" android:layout_height="fill_parent"         
   android:textFilterEnabled="true"
   android:scrollbars="vertical"
   android:drawSelectorOnTop="true"
   android:listSelector="@drawable/list_selector"></ListView>


I colori sono definiti nel file di resources (colors.xml) in questo modo:

Code:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red">#FF0000</color>
<color name="green">#00FF00</color>
<color name="blue">#0000FF</color>
<color name="white">#ffffff</color>
<color name="black">#000000</color>
<color name="grey">#B2B2B2</color>
</resources>


Il risultato che ho ottenuto, però, è che tutta la lista si colora di verde al click e al focus (e non il singolo elemento).. :o coprendo ed impedendo la visualizzazione del contenuto..


Top
 Profile  
 
 Post subject: Re: Cambiare colore elementi listView on focus e on click
PostPosted: Tue Nov 23, 2010 3:32 pm 
Offline
Moderatore
User avatar

Joined: Thu Dec 27, 2007 3:51 pm
Posts: 986
Cellulare Android: HTC Dream
Operatore: TIM
Punti Android: 1320
Ciao,
per gestire il singolo item quando viene cliccato:
- per lo sfondo usa il selector
- per il testo, il mio consiglio è:
Quote:
Se invece vuoi specificare un colore diverso per l'item che viene selezionato dall'utente, lo puoi fare "programmatically" selezionando l'item con SetPosition e richiamando il metodo SetColorText (ciascuna riga di una ListView è una view anch'essa)


Top
 Profile  
 
 Post subject: Re: Cambiare colore elementi listView on focus e on click
PostPosted: Tue Nov 23, 2010 3:57 pm 
Offline
User avatar

Joined: Mon Nov 22, 2010 9:35 am
Posts: 4
Cellulare Android: HTC Tattoo
Operatore: Wind
Punti Android: 0
Ciao,
scusami ma non mi è chiara ancora una cosa, non riesco a capire bene..

tu dici:
Quote:
per gestire il singolo item quando viene cliccato:
- per lo sfondo usa il selector


io ho utilizzato il selector (nel modo descritto nel mio post precedente) proprio per fare in modo che al click venisse modificato il colore di sfondo del singolo item, ma ho come risultato che viene modificato il colore di sfondo di tutta la listView (quindi di tutti gli item della listView)..

Grazie per il tuo aiuto, :wave:


Top
 Profile  
 
 Post subject: Re: Cambiare colore elementi listView on focus e on click
PostPosted: Tue Nov 23, 2010 4:11 pm 
Offline
Moderatore
User avatar

Joined: Thu Dec 27, 2007 3:51 pm
Posts: 986
Cellulare Android: HTC Dream
Operatore: TIM
Punti Android: 1320
Sorry, non avevo capito (credevo che il problema l'avessi per il setting del colore del testo).
Strano perchè:
Quote:
android:drawSelectorOnTop
When set to true, the selector will be drawn over the selected item

Se metti a "false" cambia qualcosa ?


Top
 Profile  
 
 Post subject: Re: Cambiare colore elementi listView on focus e on click
PostPosted: Tue Nov 23, 2010 4:21 pm 
Offline
User avatar

Joined: Thu Dec 27, 2007 7:09 pm
Posts: 659
Cellulare Android: HTC Dream
Operatore: TIM
Punti Android: 758
Ciao,
il selector dovrebbe permetterti di specificare un colore diverso per ogni stato della riga (item) della Listview, come ripostato da Verix:
Quote:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:state_focused="true"
android:drawable="@drawable/item_disabled" />
<item android:state_pressed="true"
android:drawable="@drawable/item_pressed" />
<item android:state_focused="true"
android:drawable="@drawable/item_focused" />
</selector>


Quindi dovresti associare il colore desiderato all'item con attributo android:state_pressed="true" ed il colore trasparente all'item con gli altri attributi.

EDIT: Ho letto qui che bisogan fare il contrario[url]: http://daniel-codes.blogspot.com/2010/0 ... round.html[/url]
Settare il colore desiderato per l'item selezionato a tutta la ListView, settare il colore trasparente quando l'item è cliccato e settare un colore diverso per tutti gli altri stati dell'item... (pero' mi sa tanto di barba-trucco dovuto ad un baco di Android)

_________________
***URLs are hidden from guests, please register and login to view the hyperlink***


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 9 posts ] 

All times are UTC + 1 hour


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
SitemapIndex SitemapIndex RSS Feed RSS Feed Channel list Channel list
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB SEO

All trademarks and logos used in this site are of properties of their respective owners.