2014-07-02 13 views
6

Mam prosty układ główny, a następnie dodaję układ fragmentów, który pokazuje tylko wskaźnik załadowany na górze głównego układu. Problem polega na tym, że wciąż mogę naciskać przyciski za wskaźnikiem ładowania.Wyłączenie wszystkich dotknięć, gdy wskaźnik ładowania jest wyświetlany

Czy mimo to można wyłączyć dotknięcia, aby nie przeszło do tyłu? Nie chcę wyłączać każdego przycisku na ekranie głównym jeden po drugim.

+0

Zawsze po prostu ręcznie ustawiłem moje przyciski na CZYKLICZNE (FAŁSZ), gdy aktywne jest dowolne niestandardowe wyskakujące okienko. Ale chciałbym wiedzieć, czy istnieje czystsze rozwiązanie. – Jonny07

+0

Prawdopodobnie musisz wyłączyć podstawowy układ, gdy wskaźnik jest aktywny: http://stackoverflow.com/questions/12300796/android-how-to-disable-controls-during-progress-bar-is-active – JDJ

+0

Wierzę, że Próbowałem, ale to nie zadziałało. – Jonny07

Odpowiedz

12

Można ustawić „klikalny” atrybut na „true” w układzie, który zawiera 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> 

Potem zaś ProgressBar jest widoczny, jego opakowanie (który wypełnia cały ekran, chociaż jest niewidoczny) przechwyci wszelkie zdarzenia kliknięcia, aby nie wpadły one w podstawowy układ podczas wyświetlania paska ProgressBar.

Aby to wykorzystać, to zrobić, gdy chcesz pokazać ProgressBar:

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

a następnie zrobić to, gdy jesteś z nim zrobić:

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

Na przykład, jeśli” Ponownie użyj tego w AsyncTask, możesz uczynić go widocznym w onPreExecute(), a następnie uczynić go niewidocznym w onPostExecute().

+0

To się udało, to działa. – mskw

+0

Cieszę się, że mogę pomóc. Właśnie tego teraz używam. – JDJ

+0

Wielkie dzięki ... zadziałało jak urok .. – Deepak

1

Powróć true, podczas gdy chcesz zablokować dotyk użytkownika. Zastąp tę metodę w swoim Activity.

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

Brzmi jak o wiele lepsze rozwiązanie niż ręczne wyłączanie ponad 10 przycisków :) – Jonny07

+1

Inna metoda jest dla mnie czystsza, gdy ustawisz clickable = "true", ponieważ teraz każda aktywność korzystająca z tego fragmentu będzie miała widok tła wyłączony. – mskw

Powiązane problemy