2014-07-02 9 views
6

Ho una semplice estensione principale, e poi aggiungere un layout frammento che mostra solo un caricamento indicatore in cima a quello di estensione principale. Il problema è che posso ancora premere i pulsanti dietro l'indicatore di caricamento.Disabilitare tutti tocchi quando l'indicatore di carico è mostrato

Esiste un modo per disabilitare tocchi in modo che non passa attraverso il retro? Non voglio dover disabilitare ogni pulsante sulla schermata principale uno per uno.

+0

Ho sempre impostato manualmente i miei pulsanti su isClickable (false) quando è attivo qualsiasi popup personalizzato. Ma sono interessato a sapere se c'è una soluzione più pulita. – Jonny07

+0

Probabilmente è necessario disabilitare il layout sottostante mentre l'indicatore è attivo: http://stackoverflow.com/questions/12300796/android-how-to-disable-controls-during-progress-bar-is-active – JDJ

+0

I believe I ci ho provato ma non ha funzionato. – Jonny07

risposta

12

È possibile impostare l'attributo "cliccabile" a "true" nel layout che contiene il ProgressBar:

<FrameLayout 
    android:id="@+id/progressBarContainer" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:clickable="true" > 

    <ProgressBar 
     android:id="@+id/progressBar" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:layout_gravity="center" /> 

</FrameLayout> 

Poi, mentre la ProgressBar è visibile, il suo contenitore (che riempie l'intero schermo, anche se è invisibile) intercetterà qualsiasi evento di clic in modo che non cadano nel layout sottostante mentre la barra di avanzamento viene visualizzata.

Per utilizzare questa, fare questo quando si desidera visualizzare il ProgressBar:

findViewById(R.id.progressBarContainer).setVisibility(View.VISIBLE); 

e poi fare questo quando hai finito con esso:

findViewById(R.id.progressBarContainer).setVisibility(View.INVISIBLE); 

Per esempio, se si' usando questo in un AsyncTask, potresti renderlo visibile in onPreExecute(), quindi renderlo invisibile in onPostExecute().

+0

Questo ha funzionato. – mskw

+0

Contento di aver potuto aiutare. Questo è quello che sto usando anche ora. – JDJ

+0

Grazie mille .. ha funzionato come un fascino .. – Deepak

1

ritorno true mentre si vuole tocchi utente Blocca. Sostituisci questo metodo nel tuo Activity.

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    return true; 
} 
+0

suona come una soluzione molto migliore di disattivare manualmente 10+ pulsanti :) – Jonny07

+1

L'altro metodo è più pulita per me dove si imposta cliccabile = "true" perché ora qualsiasi attività che utilizza questo frammento avrà vista del fondo disabilitato. – mskw

Problemi correlati