2011-12-02 7 views
6

Miałem nadzieję uzyskać odpowiedź na mój problem, który mam w tej chwili.Okno wyskakujące z systemem Android jest zamykane po kliknięciu na zewnątrz.

Mam klasę, która rozszerza okno wyskakujące. Działa dobrze, z wyjątkiem tego, że nie chcę, aby okno się zwalniało po kliknięciu poza okno.

W tej chwili mam setOutsideTouchable(false);, ale to po prostu zatrzymuje zdarzenia za oknem, nadal odrzuca popup.

Okno dialogowe ma setCanceledOnTouchOutside(false), czy jest coś podobnego, czego mogę użyć?

Dzięki

+0

Oto moja odpowiedź [1]! Pytanie brzmi [pytanie]. [1]: http://stackoverflow.com/questions/10406339/avoiding-popupwindow-dismissal-after-touching-outside/30586418#30586418 [pytanie] http: //stackoverflow.com/questions/10406339/avoididing-popupwindow-dismissal-after-touch-outside – user2297951

Odpowiedz

6

OK tak ustalone na końcu.

Najpierw utworzono główny układ, w którym wyskakujące okienko znajduje się na odpowiednim układzie. Następnie umieściłem na górze pusty układ pełnoekranowy, który zrobiłem niewidoczny i przezroczysty.

Następnie pokazać, gdy okienko jest pokazany ustawić pełny panel ekranu widoczne setVisibility(View.VISIBLE); i ukryć, gdy okienko jest ukryte z setVisibility(View.GONE);

Należy również zwrócić prawdziwe od kontroli na dotykowym słuchacza dla układu z (Aby zatrzymać dotyk zdarzenia przechodzące z powrotem do głównego układu):

blocker.setOnTouchListener(new OnTouchListener() { 
@Override 
public boolean onTouch(View v, MotionEvent event) { 
return true; 
} 
}); 

i dać okienko właściwości:

setTouchable(true); 
setOutsideTouchable(false); 

Pozdrawiam

+0

możesz wyjaśnić dokładniej, w jaki sposób stworzyłeś układ? – lory105

+0

, kiedy płyniesz stackoverflow i nagle uświadamiasz sobie, że odpowiedź, której potrzebujesz, została napisana przez starego kolegę - okrzyki Jossa –

+0

uratowały mi dzień. Dzięki stary.. –

0

Co używasz tego PopupWindow za? Wygląda na to, że używasz go w bardziej konkretny sposób.

Powiedziawszy, prawdopodobnie będziesz musiał sprawdzić, używając setTouchInterceptor, a następnie utworzyć własną OnTouchListener, której użyjesz do sprawdzenia, gdzie został wykonany dotyk (na wyskakującym okienku lub nie).

+0

Witam, używam wyskakującego okna z karuzelą i kilkoma liniowymi układami wewnątrz. Wygląda na to, że najlepiej pasuje do tego, co muszę zrobić poza tym problemem, który mam. –