Autore Topic: Temi  (Letto 477 volte)

Offline LinkOut

  • Utente normale
  • ***
  • Post: 272
  • Respect: +38
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Temi
« il: 29 Settembre 2014, 11:40:29 CEST »
0
Curiosità:

E' possibile applicare temi differenti a componenti interni dell'applicazione?

Grazie.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 717
  • Respect: +151
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Temi
« Risposta #1 il: 29 Settembre 2014, 12:19:57 CEST »
0
Cosa intendi per componenti interni?

Per ogni activity puoi definire un tema differente.

Per le view si parla di stili, non di temi.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline LinkOut

  • Utente normale
  • ***
  • Post: 272
  • Respect: +38
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:Temi
« Risposta #2 il: 29 Settembre 2014, 12:25:08 CEST »
0
Ciao,

Alle activity puoi definire il tema usando gli stili come dici tu comunque...

Se un activity usa un tema predefinito, posso far si che la ListView della stessa activity usi invece un tema differente?

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 717
  • Respect: +151
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Temi
« Risposta #3 il: 29 Settembre 2014, 12:56:40 CEST »
0
Certo:

Codice (XML): [Seleziona]
<ListView style="@style/StileListView"
   ...
   />

Dove StileListView è lo stile dell'altro tema.

Es. se il tema di default è Holo puoi impostare il tema Holo.Light di un singolo TextView in questo modo:

Codice (XML): [Seleziona]
<TextView style="@android:style/TextAppearance.Holo.Widget.EditText"
...
/>
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline LinkOut

  • Utente normale
  • ***
  • Post: 272
  • Respect: +38
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:Temi
« Risposta #4 il: 29 Settembre 2014, 13:21:33 CEST »
0
Grazie della risposta, io ho provato un approcio di questo tipo:

Codice (XML): [Seleziona]
<style name="myAppTheme" parent="@android:style/Theme.Holo.Light">

 <item name="android:listViewStyle">@style/CustomListView</item>

</style>

<style name="CustomListView" parent="@android:style/Widget.Holo.ListView">

</style>

Senza però nessun risultato.

Infatti io vorrei far si che le listview siano Holo, essendo il tema generale Holo.Light

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 717
  • Respect: +151
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Temi
« Risposta #5 il: 29 Settembre 2014, 14:02:33 CEST »
0
Ok, adesso ho capito che intendevi tutte le ListView.

Il tuo approccio mi sembra giusto, non capisco perché non funzioni.

Hai verificato che per l'attività (o per l'app) sia applicato il tema myAppTheme?

Sei sicuro che le ListView che hai controllato non abbiano lo stile ridefinito?

Nota che così come hai definito tema e stile la modifica si applica solo alle ListView; prova anche con le absListView (sto andando per tentativi...)

Codice (XML): [Seleziona]
<style name="myAppTheme" parent="@android:style/Theme.Holo.Light">

 <item name="android:absListViewStyle">@style/CustomListView</item>
 <item name="android:listViewStyle">@style/CustomListView</item>

</style>

<style name="CustomListView" parent="@android:style/Widget.Holo.ListView">

</style>
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline LinkOut

  • Utente normale
  • ***
  • Post: 272
  • Respect: +38
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:Temi
« Risposta #6 il: 29 Settembre 2014, 14:19:23 CEST »
0
Scusa, forse mi sarò espresso male...

Comunque quello che hai descritto è l'obiettivo finale, la lista non dovrebbe avere nulla di custom, perchè è una lita della searchview.

L'app applica correttamente il tema Holo.Light, invece quella maledetta lista non vuole saperne di prendere la Holo.

E la cosa mi fa molto strana, ora provo a vedere se cambia qualcosa con il tuo consiglio.


EDIT: Provato con absListView... niente da fare.
« Ultima modifica: 29 Settembre 2014, 14:23:47 CEST da LinkOut »

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 717
  • Respect: +151
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Temi
« Risposta #7 il: 30 Settembre 2014, 22:24:44 CEST »
+1
Ho capito dove sta l'inghippo.

Per farla breve: Data una app (o un'activity) con un tema A, non è possibile fare in modo che un widget appaia con il tema B, a meno di workaround.

Questo perché la maggior parte dei parametri (=attributi) dello stile di un widget sono valorizzati in base al tema. Ad esempio nel tema si dichiarano i seguenti attributi: il colore del testo (textColorPrimary) è nero, lo sfondo (colorBackground) è bianco, ecc.

Poi, sempre nel tema, si definiscono gli stili dei vari widget: ad esempio lo stile dei TextView (textViewStyle) è @android:style/Widget.Holo.Light.TextView.

Il problema è che questo stile (Widget.Holo.Light.TextView) attinge agli attributi definiti sopra, come ad esempio textColorPrimary. Per cui anche se uso l'equivalente del tema holo dark (Widget.Holo.TextView) il colore del testo sarà sempre nero e lo sfondo sarà sempre bianco, perché il tema attualmente applicato è Holo.Light ed anche lo stile definito per Holo userà gli attributi di Holo.Light (quindi testo nero e sfondo bianco).

Come dicevo, c'è un workaround molto semplice: ridefinire lo stile da applicare. Quindi invece di usare semplicemente:
Codice (XML): [Seleziona]
<style name="CustomListView" parent="@android:style/Widget.Holo.ListView">
</style>
devi ridefinire tutti gli stili del ListView (nell'esempio che segue ho modificato solo il background):
Codice (XML): [Seleziona]
<style name="CustomListView" parent="@android:style/Widget.Holo.ListView">
    <item name="android:background">#000</item>
    ...
</style>

In più ho avuto modo di appurare per per quanto riguarda i ListView il lavoro da fare non è banale, perché gli stili da ridefinire sono quelli dei ListView stessi (ce ne sono almeno 2) e quello degli adapter. Un esempio incompleto che mostra come procedere:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
   
    <style name="MyStyle" parent="@android:style/Theme.Holo.Light">
        <item name="android:listViewStyle">@style/customListViewStyle</item>
        <item name="android:listViewWhiteStyle">@style/customListViewWhiteStyle</item>
        <item name="android:textAppearanceListItem">@style/customTextAppearanceListItem</item>
        <item name="android:textAppearanceListItemSmall">@style/customTextAppearanceListItemSmall</item>
    </style>
   
    <style name="customListViewStyle" parent="@android:style/Widget.Holo.ListView">
        <item name="android:background">#000</item>
    </style>
   
    <style name="customListViewWhiteStyle" parent="@style/customListViewStyle">
    </style>
   
    <style name="customTextAppearanceListItem" parent="@android:style/TextAppearance.Holo.Large">
        <item name="android:textColor">@android:color/primary_text_dark</item>
    </style>
   
    <style name="customTextAppearanceListItemSmall" parent="@style/customTextAppearanceListItem">
    </style>
   
</resources>

Fammi sapere
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline LinkOut

  • Utente normale
  • ***
  • Post: 272
  • Respect: +38
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:Temi
« Risposta #8 il: 08 Ottobre 2014, 14:39:52 CEST »
0
Purtoppo la soluzione da te suggerita non ha portato a risultati...

La list di cuoi voglio customizzare l'aspetto è una lista di una SearchView... hmm

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 717
  • Respect: +151
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Temi
« Risposta #9 il: 11 Dicembre 2014, 11:21:41 CET »
0
Citazione
La list di cuoi voglio customizzare l'aspetto è una lista di una SearchView... hmm

Ah, ma specificarlo prima? :D

Ridefinire lo stile delle SearchView richiede un po' più lavoro del normale, in quanto non si può fare da xml: STYLING THE ACTIONBAR SEARCHVIEW
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.