2012-03-29 19 views
6

Ho this.setVolumeControlStream(AudioManager.STREAM_MUSIC); all'inizio di tutte le attività nella mia applicazione, quindi quando l'utente preme il volume su o giù, controlla il volume multimediale.setVolumeControlStream non funziona quando viene visualizzata una finestra popup

Ho una finestra popup nel mio programma e quando appare l'utente non può più controllare il volume.

Guardando domande simili, sembra che l'istituzione onKeyup/down ascoltatori possono interferire con il processo - ma non ho impostare una up - i soli ascoltatori che ho per la finestra pop-up sono setOnClickListeners per i pulsanti e un setOnDismissListener per la finestra.

Come posso risolvere questo?

risposta

0

ero stato la creazione della finestra pop-up con

my_popup_window = new PopupWindow(layout, x, y, true); 

ho poi cambiare a questo ...

my_popup_window = new PopupWindow(layout); 
my_popup_window.setWidth(x); 
my_popup_window.setHeight(y); 

e il controllo del volume iniziato a lavorare di nuovo. Non capisco perché - ma ha funzionato.

1

Sembra che sia necessario chiamare setOwnerActivity sull'oggetto Dialog.

documentazione dal metodo:

imposta l'attività che possiede questa finestra di dialogo. Un esempio di utilizzo: questa finestra di dialogo utilizzerà il flusso di controllo del volume suggerito dell'attività.

Mentre non testato, questo dovrebbe fare il trucco. C'è anche la possibilità di utilizzare setVolumeControlStream.

+0

Purtroppo ho una finestra popup, non una finestra di dialogo, e né setOwnerActivity né setVolumeControlStream sembrano disponibili. – Mick

+0

Quindi non sei fortunato, mi sono nascosto alla fonte AOSP di 'PopupWindow.java' e' Dialog.java' per come si poteva fare ma non ci riesce. 'PopupWindow' utilizza l'API privata di' WindowManager' per visualizzare la vista. Dovresti chiamare "setVolumeControlStream()" sulla 'Finestra', ma semplicemente non è usato. C'è qualche possibilità che tu possa passare ad una finestra basata su 'Dialog'? – Luminger

+0

Ci proverò - ma non sono sicuro perché questa è la finestra più complicata che abbia mai realizzato. È altamente personalizzato, contiene animazioni e viene creato interamente a livello di programmazione. – Mick

0

Faccio solo questo pop.setFocusable(false). e ha funzionato.

0

sebbene la risposta di Mick non ha funzionato per me, questo è per i posteri.

//Declaration 
PopupWindow mWindow; 
... 

//Constructor 
mWindow  = new PopupWindow(context); 
... 

//Prepare to Show 
mWindow.setContentView(); 
mWindow.setBackgroundDrawable(); 
mWindow.setFocusable(false); 
... 

impostazione setFocusable a falso aiutato ancora una volta la mia attività di cattura onKeyDown().

Problemi correlati