2014-06-25 9 views
31

Quando si utilizza SwipeRefreshLayout in combinazione con una modalità di sovrapposizione ActionBar, l'animazione di caricamento verrà visualizzata dietro la barra di azione, rendendola quasi invisibile.SwipeRefreshLayout behind ActionBar

C'è qualcosa che posso fare per mostrarlo in cima alla barra delle azioni?

+0

Ho lo stesso problema, non riesco a capire un modo per mostrare la loader nella giusta posizione –

risposta

55

Nella versione Material design della libreria appcompat-v7 (v21.0.0), SwipeRefreshLayout ottiene un metodo per impostare l'offset della vista di avanzamento.

https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html#setProgressViewOffset(boolean,%20int,%20int)

public void setProgressViewOffset (scala boolean, inizio int, int end)

L'indicatore di aggiornamento di partenza e la posizione di riposo è sempre posizionato nella parte superiore del contenuto rinfrescante. Questa posizione è una posizione coerente, ma può essere regolata in entrambe le direzioni in base alla presenza o meno di una barra degli strumenti o di una barra di azione.

Parametri

scala impostata su true se non c'è la vista ad un più alto ordine Z da quello in cui il filatore di avanzamento è impostato per apparire.

start L'offset in pixel dall'alto di questa vista in cui dovrebbe apparire il dispositivo di selezione del progresso.

fine L'offset in pixel dall'alto di questa vista in cui lo spinner di progresso dovrebbe fermarsi dopo un gesto di scorrimento riuscito.

+0

Ho importato la nuova libreria e funziona bene (posso vedere il nuovo swiperefreshanimation) ma ho bisogno di spostarlo verso il basso. Usando questo metodo ottengo 'Il metodo setProgressViewOffset (booleano, int, int) non è definito per il tipo SwipeRefreshLayout'. Si prega di vedere la mia domanda su questo: http://stackoverflow.com/questions/26713832/setprogressviewoffsetboolean-int-int-is-undefined-for-the-type-swiperefreshl –

1

EDIT

questa era la soluzione migliore prima che il V21 della biblioteca appcompat-V7. Se utilizzi la versione 21 o successiva, controlla la risposta approvata. Nel caso tu stia utilizzando l'API appcompat-v7 < 21, questo ti aiuterebbe comunque.


È possibile risolvere questo problema facilmente copiando la SwipeRefreshLayout (e le sue dipendenze) nel progetto e modificare in cui viene visualizzata la barra di avanzamento, l'aggiunta di un margine superiore.

Per facilitare tutti ho rilasciato una libreria con il margine implementato. Date un'occhiata a questo: https://github.com/Naroh091/SwipeRefreshLayoutOverlay

Spero che aiuti!

+5

Peccato che questa soluzione implichi la copia dell'intero codice della classe SwipeRefreshLayout. – Frank

+2

Abbiamo bisogno di qualcuno che lavori su questo a Google per creare un metodo per questo. Odio dover allontanarsi dal codice ufficiale. Il collegamento –

+0

non è più valido. –

0

Invece di impostare paddingTop sul SwipeRefreshLayout, impostando il layout_marginTop farà la barra di avanzamento visibile:

<android.support.v4.widget.SwipeRefreshLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginTop="?android:attr/actionBarSize"> 
+2

Sì, ma l'elenco deve essere in grado di scorrere sotto la barra delle azioni per rendere l'animazione un bell'aspetto (utilizzo una barra di azione della modalità di sovrapposizione, la barra delle azioni è semitrasparente). L'elenco deve essere il figlio diretto di SwipeFreshLayout, quindi non funzionerà. – Frank

+0

Non è quello che vogliamo. – tasomaniac

1

Ho riscontrato questo problema quando ho aggiornato la mia dipendenza da appcompat 19.1.0 a 21.0.0 e non ho apportato modifiche al codice.

Questo è in realtà un problema noto con SwipeRefreshLayout in appcompat 21.0.0.

Guardate qui per una soluzione: https://code.google.com/p/android/issues/detail?id=77712

12

provare questo codice:

int top_to_padding=100; 
swipe_refresh_layout.setProgressViewOffset(false, 0,top_to_padding); 

spero proprio lavoro per voi.

4

la risposta di Vijay Rajput lavora per me, ma il problema era solo su Kitkat o alta così ho incluso:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { swipeLayout.setProgressViewOffset(false, 0,100); }

Problemi correlati