2015-06-26 7 views
16

मैंने सलाह here सलाह दी है, सलाह here, सलाह here, मैंने अपनी बेस गतिविधि में ATAttachedToWindow() पर टिप्पणी की है। मेरे पास इस वर्ग, बेसएक्टिविटी से विरासत में दो गतिविधियां हैं। एक रन चलता है, और कोई नहीं करता है। क्या अंतर हो सकता है? मेरा लक्ष्य एसडीके 1 9 है; इसे 12 में बदलना कोई फर्क नहीं पड़ता। यहाँ BaseActivity के लिए मेरे onCreate है:IllegalArgumentException: खिड़की को जोड़ने के बाद विंडो प्रकार बदला नहीं जा सकता

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onAttachedToWindow(); 
    super.onCreate(savedInstanceState); 

    .... 
    } 

जब दूसरी गतिविधि पर जाकर, कोड के माध्यम से कदम है, यह इसके onCreate के माध्यम से करता है(), onResume(), तो दुर्घटनाओं।

समस्या क्या हो सकती है?

स्टैकट्रेस: ​​

06-26 13:41:57.963 28667-28667/com.assistek.ediary E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.assistek.ediary, PID: 28667 
java.lang.IllegalArgumentException: Window type can not be changed after the window is added. 
     at android.os.Parcel.readException(Parcel.java:1550) 
     at android.os.Parcel.readException(Parcel.java:1499) 
     at android.view.IWindowSession$Stub$Proxy.relayout(IWindowSession.java:903) 
     at android.view.ViewRootImpl.relayoutWindow(ViewRootImpl.java:5301) 
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1507) 
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061) 
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885) 
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
     at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
     at android.view.Choreographer.doFrame(Choreographer.java:550) 
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5254) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

संपादित: अगर मैं एपीआई 12 लक्षित करते हैं और onAttachedToWindow में से onCreate में परिवर्तन के सभी डाल करने के लिए बदलने के लिए, मैं दूर जाना इस अपवाद प्राप्त कर सकते हैं, लेकिन मैं चाहता हूँ लक्ष्य एसडीके 19.

मेरे नई onCreate() होने के लिए:

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 
... 
} 

मेरे नई onAttachedToWindow():

@Override 
public void onAttachedToWindow() { 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 
    super.onAttachedToWindow(); 
} 

लक्ष्य एपीआई के साथ यह केवल काम करता है 12.

उत्तर Min target must be less than 14 when WindowManager.LayoutParams.TYPE_KEYGUARD used

+0

के लिए एपीआई 19 इस कोशिश –

+3

यदि आपके पास है, तो 'onAttachedToWindow()' के ओवरराइड के अंदर कहीं भी 'super.onAttachedToWindow()' को कॉल न करें। जबकि मैं 'TYPE_KEYGUARD' से बात नहीं कर सकता, शेष कोड 'super.onCreate()' के बाद होना चाहिए, लेकिन किसी भी' setContentView() 'कॉल से पहले होना चाहिए। इसके अलावा, देखें कि क्या आपके पास अपने मैनिफेस्ट में कुछ दिलचस्प है जो आपकी दो गतिविधियों के बीच अंतर को समझा सकता है। – CommonsWare

+0

एकमात्र चीज जो दोनों गतिविधियों के बीच अलग है: एंड्रॉइड: clearTaskOnLaunch = "true" –

उत्तर

5

कोशिश खिड़की के लिए इसका उपयोग करने के लिए:

requestWindowFeature(Window.FEATURE_NO_TITLE); 
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FULLSCREEN); 
setContentView(R.layout.activity_adjectives); 
+0

अन्य उत्तर के समान, और यह काम नहीं किया। –

+2

यह शायद वह उत्तर होगा जो बक्षीस से सम्मानित हो जाता है, लेकिन यह जवाब काम नहीं करता है। –

1

मैं वें में भाग गया एक ही सवाल है। लेकिन BaseActivity की super.onCreate(savedInstanceState); से पहले

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 
requestWindowFeature(Window.FEATURE_NO_TITLE); 

जोड़ने को रोकने के बाद, यह अच्छी तरह से काम करता है। मैं BaseActivity के वंशजों के super.onCreate(savedInstanceState); से पहले कोडों को काट और पेस्ट करता हूं।

बीटीडब्ल्यू, मुझे नहीं लगता कि आपको के जीवन चक्र के तरीकों के अंदर super.onAttachedToWindow(); पर कॉल करना होगा। क्योंकि onAttachedToWindow(); को तब कहा जाता है जब दृश्य View पर ओवरराइड करते समय दृश्य से जुड़ा होता है।

+0

यह काम नहीं किया। –

+0

getWindow()। SetType (WindowManager.LayoutParams.TYPE_KEYGUARD); TYPE_KEYGUARD को बहिष्कृत किया गया है। –

1

मुझे यह समस्या भी थी, लेकिन मैंने इसे विंडो को हटाकर, पैराम को बदलकर और फिर विंडो को फिर से जोड़कर हल किया। यह मेरे लिए काफी अच्छा था।

WindowManager.removeView(View); params = params2; //changed the params to something else WindowManager.updateViewLayout(View, params); WindowManager.addView(View, params);

0

देर उत्तर के लिए क्षमा करें। आप जोड़ना चाहिए: onCreate विधि में

requestWindowFeature(Window.FEATURE_NO_TITLE); 
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
WindowManager.LayoutParams.FLAG_FULLSCREEN); 

यदि आप एपीआई स्तर 15 या इसके बाद के संस्करण का उपयोग कर रहे हैं। इससे मेरा काम बनता है।

0

निकालें

this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG|WindowManager.LayoutParams.FLAG_FULLSCREEN); 
अपने onAttachedToWindow() से

, इस तरह: https://developer.android.com/training/system-ui/immersive.html:

@Override 
    public void onAttachedToWindow() { 
     //this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG|WindowManager.LayoutParams.FLAG_FULLSCREEN); 

      super.onAttachedToWindow(); 
    } 
संबंधित मुद्दे

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