2012-02-20 11 views
7

Ho overlay View gestito da WindowManager, proprio come in this question.Android: modifica LayoutParam della vista aggiunto da WindowManager

In breve, sembra che questo:

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
my_view_layout_params = new WindowManager.LayoutParams(
     WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
     WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, 
     PixelFormat.TRANSLUCENT); 

wm.addView(my_view, my_view_layout_params); 

Funziona, ma se ho bisogno di cambiare params di layout, ho bisogno di rimuovere visualizzare e aggiungere di nuovo, così:

wm.removeView(my_view); 
wm.addView(my_view, my_view_layout_params); 

Non sembra molto bello. Ho provato a fare my_view.setLayoutParams(my_view_layout_params), ma purtroppo non funziona. Come posso farlo?

+0

si può non fare view.getLayoutParams(), aggiornare l'oggetto restituito layoutparams, e quindi chiamare view.requestLayout() ? –

+0

Reuben, grazie per la risposta, ma sfortunatamente non funziona. faccio 'view.getLayoutParams()', poi cambio 'gravity' di LayoutParams restituiti, faccio 'view.requestLayout()', e nulla è cambiato. –

+1

WindowManager ha un membro updateViewLayout() ... sicuramente è esattamente quello che vuoi? –

risposta

11

WindowManager ha un membro updateViewLayout() ... sicuramente è esattamente quello che desideri?

(come originariamente risposto in commento)

+1

Questo metodo è utile ma fai attenzione perché alcune proprietà come il tipo di finestra non possono essere modificate una volta impostate, otterrai un FC se lo provi. – Tom

+0

sì, questo ha funzionato. Non c'è bisogno di usare 'setLayoutParams'. Grazie! –

+0

Dove posso usare questo metodo updateViewLayout()? –

3

È possibile utilizzare questo:

wm.updateViewLayout(my_view,my_view_layout_params); 
Problemi correlati