2015-01-23 6 views
10

Ho Android SwipeRefreshLayout che funziona e sto cercando di personalizzare i colori su tutto il pull per l'aggiornamento in tutta l'app. Al fine di seguire il principio DRY, ho provato a spostare i colori desiderati per array.xml come segue:Come passare l'array int degli ID delle risorse colore da array.xml a SwipeRefreshLayout.setColorSchemeResources

<resources> 
    <array name="swipeRefreshColors"> 
     <item>@color/pink</item> 
     <item>@color/green</item> 
    </array> 
</resources> 

Tuttavia, quando provo e importarli in swipe per aggiornare:

swipeRefreshLayout.setColorSchemeResources(R.array.swipeRefreshColors); 

ottengo un Risorse $ NotFoundException:

android.content.res.Resources$NotFoundException: Resource ID #0x7f060001 
      at android.content.res.Resources.getValue(Resources.java:1233) 
      at android.content.res.Resources.getColor(Resources.java:887) 
      at android.support.v4.widget.SwipeRefreshLayout.setColorSchemeResources(SwipeRefreshLayout.java:477) 

ho provato un paio di cose, come sottoclasse il codice SwipeRefreshLayout e duro codifica i colori lì, ma è sicuramente un hack. Deve esserci un modo per fare riferimento a una serie di colori dall'Attività per personalizzarlo.

Qualsiasi aiuto sarebbe molto apprezzato!

risposta

14

Risulta che mancavano due pezzi chiave.

Codice errato:

swipeRefreshLayout.setColorSchemeResources(R.array.swipeRefreshColors); 

codice corretto:

swipeRefreshLayout.setColorSchemeColors(getResources().getIntArray(R.array.swipeRefreshColors)); 

C'erano due cose che mi mancava.

1) Avevo bisogno di indicare che stavo ottenendo un IntArray dal mio file array.xml. Questo viene fatto tramite getResources().getIntArray(R.array.swipeRefreshColors).

La risposta è stata cancellata, ma grazie a chi l'ha suggerito prima.

2) La parte fondamentale che era sbagliata è che ho dovuto usare setColorSchemeColors anziché setColorSchemeResources. Suppongo che ad un certo punto del processo di compilazione i riferimenti che avevo in Array siano stati convertiti in valori di colore espliciti.

Speriamo che questo possa aiutare qualcun altro!

+0

Grazie a questo ho aiutato molto, ho provato questo in Kotlin e ho avuto errore dicendo che è necessario un Int al posto di IntArray. Ciò che ha risolto questo problema per me è stato l'aggiunta di una stella prima della variabile dell'array così simile a '* swipeRefreshColors', se si inizializza la variabile altrove. Altrimenti suppongo che sarebbe solo un 'setColorSchemeColors (* ...' :) – nmu

Problemi correlati