Autore Topic: Come personalizzare la grafica dei checkbox di una lista  (Letto 1884 volte)

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Come personalizzare la grafica dei checkbox di una lista
« il: 26 Gennaio 2011, 10:43:42 CET »
0
Ho una lista, i cui elementi vengono visualizzati con il seguente codice

Codice (Java): [Seleziona]
ListView listView = (ListView) findViewById(R.id.seleziona_giocatori_lista);
listView.setAdapter(new ArrayAdapter<GiocatoreBean>(this,
        R.layout.my_simple_list_item_multiple_choice, listaGiocatori));

Dove my_simple_list_item_multiple_choice è stato definito così

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@android:id/text1"
   android:layout_width="fill_parent"
   android:layout_height="42dip"
   android:textAppearance="?android:attr/textAppearanceMedium"
   android:gravity="center_vertical"
   android:checkMark="?android:attr/listChoiceIndicatorMultiple"
   android:paddingLeft="6dip"
   android:paddingRight="6dip"
   android:textColor="#000000"    
/>

Vorrei sapere come fare a mettere ai bottoni di checkbox della lista un'icona personalizzata
(N.B.ho due icone, una va visualizzata quando il checkbox è spuntato e una quando non è spuntato)
In questo momento la grafica dei checkbox è quella di defualt di android

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Come personalizzare la grafica dei checkbox di una lista
« Risposta #1 il: 26 Gennaio 2011, 10:54:48 CET »
0

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Come personalizzare la grafica dei checkbox di una lista
« Risposta #2 il: 26 Gennaio 2011, 11:04:16 CET »
0
Ti linko due risorse utili che mi sono annotato per questo scopo:

Qua la spiegazione teorica con un esempio pratico:
StateList

Qua il database dei drawable ufficiali di Android 2.2:
Android Drawables
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come personalizzare la grafica dei checkbox di una lista
« Risposta #3 il: 26 Gennaio 2011, 12:15:00 CET »
0
Scusatemi ma dagli esempi che ho guardato non riesco a scrivere un codice che compili
In questo momento ho già un mio stile applicato alla mia app
Questo stile cambia la grafica dei radioButton e lo faccio con il seguente styles.xml:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomTheme" parent="android:Theme">
   <item name="android:radioButtonStyle">@style/RadioButton</item>
</style>
<style name="RadioButton" parent="@android:style/Widget.CompoundButton.RadioButton">
   <item name="android:button">@drawable/radio</item>
</style>
</resources>

Quello che vorrei fare è cambiare la grafica dei checkbox, ho provato a scrivere questo:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomTheme" parent="android:Theme">
   <item name="android:radioButtonStyle">@style/RadioButton</item>
   <item name="android:checkboxStyle">@style/CheckBox</item>
</style>
<style name="RadioButton" parent="@android:style/Widget.CompoundButton.RadioButton">
   <item name="android:button">@drawable/radio</item>
</style>
<style name="CheckBox" parent="@android:style/Widget.CompoundButton.CheckBox">
   <item name="android:button">@drawable/check</item>
</style>
</resources>
Ma quando eseguo l'app i radio button cambiano la propria grafica, i checkbox no

il file chck.xml è così definito

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_checked="true" android:state_window_focused="false"
                android:drawable="@drawable/radio_hover" />
        <item android:state_checked="false" android:state_window_focused="false"
                android:drawable="@drawable/radio_normal" />
        <item android:state_checked="true" android:state_pressed="true"
                android:drawable="@drawable/radio_active" />
        <item android:state_checked="false" android:state_pressed="true"
                android:drawable="@drawable/radio_active" />
        <item android:state_checked="true" android:state_focused="true"
                android:drawable="@drawable/radio_hover" />
        <item android:state_checked="false" android:state_focused="true"
                android:drawable="@drawable/radio_normal_off" />
        <item android:state_checked="false" android:drawable="@drawable/radio_normal" />
        <item android:state_checked="true" android:drawable="@drawable/radio_hover" />
</selector>

Il problema penso sia nella R.layout.my_simple_list_item_multiple_choice (sopra trovate il codice) che in qualche modo sovrascrive il mio stile
« Ultima modifica: 26 Gennaio 2011, 12:30:32 CET da andream1977 »

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Come personalizzare la grafica dei checkbox di una lista
« Risposta #4 il: 26 Gennaio 2011, 12:55:36 CET »
0
te hai cambiato stile a checkbox,mentre sopra hai messo una checked textView! credo vengano trattati diversamente!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come personalizzare la grafica dei checkbox di una lista
« Risposta #5 il: 26 Gennaio 2011, 13:37:38 CET »
0
checked textView è il componente di android presente nella R.layout.my_simple_list_item_multiple_choice il cui codice è stato preso dalla
simple_list_item_multiple_choice di android

come faccio a mettere il mio stile dei checbox alla checked textView?

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Come personalizzare la grafica dei checkbox di una lista
« Risposta #6 il: 30 Gennaio 2011, 15:52:45 CET »
+2
Sono riuscito a risolvere questo problema, scrivo la soluzione magari potrà essere utile ad altri.
Per personalizzare la grafica del checkbox di un CheckedTextView che di default ha questo codice:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@android:id/text1"
  android:layout_width="fill_parent"
  android:layout_height="42dip"
  android:textAppearance="?android:attr/textAppearanceMedium"
  android:gravity="center_vertical"
  android:checkMark="?android:attr/listChoiceIndicatorMultiple"
  android:paddingLeft="6dip"
  android:paddingRight="6dip"
  android:textColor="#000000"    
/>

Bisogna sovrascrivere l'attributo android:checkMark nel seguente modo

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@android:id/text1"
   android:layout_width="fill_parent"
   android:layout_height="42dip"
   android:textAppearance="?android:attr/textAppearanceMedium"
   android:gravity="center_vertical"
   android:checkMark="@drawable/radio"
   android:paddingLeft="6dip"
   android:paddingRight="6dip"
   android:textColor="#000000"
/>

dove radio è un file radio.xml che va messo nella dir drawable e contiene il seguente codice:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_checked="true" android:state_window_focused="false"
                android:drawable="@drawable/radio_hover" />
        <item android:state_checked="false" android:state_window_focused="false"
                android:drawable="@drawable/radio_normal" />
        <item android:state_checked="true" android:state_pressed="true"
                android:drawable="@drawable/radio_active" />
        <item android:state_checked="false" android:state_pressed="true"
                android:drawable="@drawable/radio_active" />
        <item android:state_checked="true" android:state_focused="true"
                android:drawable="@drawable/radio_hover" />
        <item android:state_checked="false" android:state_focused="true"
                android:drawable="@drawable/radio_normal_off" />
        <item android:state_checked="false" android:drawable="@drawable/radio_normal" />
        <item android:state_checked="true" android:drawable="@drawable/radio_hover" />
</selector>

Nel file radio.xml abbiamo usato radio_normal, radio_hover, radio_active e radio_normal_off che sono le personalizzazioni grafiche del nostro radiobutto o checkbox

Invece per cambiare il separatore di default tra una riga e l'altra della lista bisogna scrivere:

Drawable lineaViola = res.getDrawable(R.drawable.linea_viola);
listView.setDivider(lineaViola);

dove listView è l'id della nostra lista e linea_viola.xml ha questo codice:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="line">
        <stroke android:width="1dip" android:color="#8e55a3" />
        <size android:height="12dip" />

</shape>

In questo esempio che ho fatto viene sostituita la linea nera presente di default con una linea di colore viola
« Ultima modifica: 30 Gennaio 2011, 16:55:17 CET da andream1977 »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Come personalizzare la grafica dei checkbox di una lista
« Risposta #7 il: 30 Gennaio 2011, 18:13:14 CET »
0
Grazie per aver condiviso la tua soluzione :)