Autore Topic: Come cambiare il colore di una riga cliccata  (Letto 783 volte)

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Come cambiare il colore di una riga cliccata
« il: 06 Dicembre 2010, 00:56:43 CET »
0
Ho un  activity composto da 5 righe
Vorrei che cliccando su ciascuna riga cambiasse il colore di background della riga
Ho provato a seguire il codice preso da un esempio su internet, il risultato è che la prima volta che la riga viene cliccata cambia colore poi non cambia più
Questo il codice dell'xml che regola il layout della mia activity

Codice (XML): [Seleziona]
<LinearLayout android:layout_width="fill_parent"
                                        android:layout_height="80dip" android:orientation="horizontal"
                                        android:background="@drawable/linear_layout_state_color"
                                        android:focusable="true" android:focusableInTouchMode="true"
                                        android:clickable="true" >

                                        <TextView android:id="@+id/id1"
                                                android:layout_height="wrap_content" android:layout_width="80dip"
                                                android:text="Data" />

                                        <TextView android:id="@+id/id2"
                                                android:layout_height="wrap_content" android:layout_width="wrap_content"
                                                android:text="01/11/2010" />

                                        <TextView android:id="@+id/id3"
                                                android:layout_width="wrap_content" android:layout_height="wrap_content"
                                                android:text="Pieno">
                                        </TextView>
                                </LinearLayout>

Nella dir res/drawable ho messo il file linear_layout_state_color.xml:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@color/black" /> <!-- focused -->
    <item android:state_focused="true" android:state_pressed="true" android:drawable="@color/black" /> <!-- focused and pressed-->
    <item android:state_pressed="true" android:drawable="@color/blue" /> <!-- pressed -->
    <item android:drawable="@android:color/transparent" /> <!-- default -->
</selector>

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Come cambiare il colore di una riga cliccata
« Risposta #1 il: 06 Dicembre 2010, 01:02:54 CET »
0
Prova a dare android:background="@drawable/linear_layout_state_color" alle varie TextView piuttosto che al LinearLayout.
Però se l'effetto che vuoi ottenere è quello che avresti premendo un item di una ListView ti converrebbe dargli android:layout_width="fill_parent".

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come cambiare il colore di una riga cliccata
« Risposta #2 il: 06 Dicembre 2010, 12:22:18 CET »
0
Ricky ho provato varie soluzioni, ti scrivo l'ultima che è quella suggerita da te:

Codice (XML): [Seleziona]
<LinearLayout android:layout_width="fill_parent"
        android:layout_height="80dip" android:orientation="horizontal"
        android:background="@drawable/linear_layout_state_color"
        android:focusable="true" android:focusableInTouchMode="true"
        android:clickable="true" xmlns:android="http://schemas.android.com/apk/res/android">

        <TextView android:id="@+id/date_label" android:layout_height="fill_parent"
                android:layout_width="fill_parent" android:textColor="@color/white"
                android:background="@drawable/linear_layout_state_color" android:text="data" />

        <TextView android:id="@+id/date_value" android:layout_height="wrap_content"
                android:layout_width="fill_parent" android:textColor="@color/white"
                android:background="@drawable/linear_layout_state_color" android:text="01/11/2010" />

        <TextView android:id="@+id/date_type" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textColor="@color/white"
                android:background="@drawable/linear_layout_state_color" android:text="Pieno">
        </TextView>
</LinearLayout>

Il risultato è sempre il solito, la riga non si evidenzia

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come cambiare il colore di una riga cliccata
« Risposta #3 il: 06 Dicembre 2010, 13:18:19 CET »
0
Ho trovato la soluzione, la scrivo magari può essere utile a qualcuno, o magari può diventare uno snippet

Layout della activity
Codice (XML): [Seleziona]
<LinearLayout android:layout_width="fill_parent"
        android:layout_height="80dip" android:orientation="horizontal"
        android:clickable="true" xmlns:android="http://schemas.android.com/apk/res/android"
        android:background="@drawable/linear_layout_state_color">

        <TextView android:id="@+id/date_label" android:layout_height="fill_parent"
                android:layout_width="wrap_content" android:textColor="@color/white"
                android:text="data" />

        <TextView android:id="@+id/date_value" android:layout_height="wrap_content"
                android:layout_width="wrap_content" android:textColor="@color/white"
                android:text="01/11/2010" />

        <TextView android:id="@+id/date_type" android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:textColor="@color/white"
                android:text="Pieno">
        </TextView>
</LinearLayout>

Dentro la cartella res/drawable mettere i seguenti files:
normal.xml
Codice (XML): [Seleziona]
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
   <solid android:color="@color/green" />
 </shape>

pressed.xml
Codice (XML): [Seleziona]
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
   <solid android:color="@color/red" />
 </shape>

linear_layout_state_color.xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/pressed" />
    <item android:drawable="@drawable/normal" />
</selector>

Definire i colori da usare mettendo il file colors.xml dentro la dir values
colors.xml
Codice (XML): [Seleziona]
<color name="red">#f10303</color>
<color name="green">#2ca900</color>