2012-02-20 16 views
7

द्वारा जोड़े गए व्यू के लेआउट पैराम्स को बदलें की तरह WindowManager द्वारा प्रबंधित किया गया है।एंड्रॉइड: विंडोमैनेजर

संक्षेप में, यह इस तरह दिखता है:

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); 

यह काम करता है, लेकिन अगर मैं लेआउट पैरामीटर को बदलने की जरूरत, मैं दृश्य को हटा दें और इसे फिर से जोड़ने के लिए, इस तरह की जरूरत है:

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

यह बहुत सुंदर नहीं लग रहा है। मैंने my_view.setLayoutParams(my_view_layout_params) करने की कोशिश की, लेकिन यह दुर्भाग्य से काम नहीं करता है। मैं यह कैसे कर सकता हूं?

+0

आप view.getLayoutParams() नहीं कर सकते, लौटे layoutparams वस्तु को अद्यतन, और फिर फोन view.requestLayout() ? –

+0

रूबेन, उत्तर के लिए धन्यवाद, लेकिन दुर्भाग्यवश यह काम नहीं करता है। मैं 'view.getLayoutParams()' करता हूं, फिर मैं वापस लेआउटपैम के 'गुरुत्वाकर्षण' को बदलता हूं, 'view.requestLayout() ', और कुछ भी नहीं बदला। –

+1

WindowManager में एक अद्यतनViewLayout() सदस्य है ... निश्चित रूप से यह वही है जो आप चाहते हैं? –

उत्तर

11

विंडोमेनगर के पास एक अद्यतनViewLayout() सदस्य है ... निश्चित रूप से यह वही है जो आप चाहते हैं?

(के रूप में मूल रूप से टिप्पणी में कहा)

+1

यह विधि सहायक है लेकिन सावधान रहें क्योंकि विंडो प्रकार जैसे कुछ गुण सेट किए जाने के बाद बदल नहीं सकते हैं, यदि आप इसे आजमाते हैं तो आपको एक एफसी मिल जाएगी। – Tom

+0

हाँ यह काम किया। 'SetLayout पैराम्स' का उपयोग करने की कोई आवश्यकता नहीं है। धन्यवाद! –

+0

मैं इस अद्यतनViewLayout() विधि का उपयोग कहां कर सकता हूं? –

3

आप इस का उपयोग कर सकते हैं:

wm.updateViewLayout(my_view,my_view_layout_params); 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^