IllegalArgumentException:添加窗口后无法更改窗口types

我已经在这里尝试了build议, 这里的build议, 这里的build议,我已经在我的基本活动中注释了onAttachedToWindow()。 我有两个活动inheritance自这个类,BaseActivity。 一个运行,一个不运行。 有什么区别? 我的目标SDK是19; 将其更改为12没有区别。 这里是我的BaseActivity的onCreate:

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

编辑 :如果我改变目标API 12,并把所有的变化从onCreate onAttachedToWindow ,我可以得到这个exception消失,但我想目标SDK为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(); } 

这只适用于目标API 12。

当使用WindowManager.LayoutParams.TYPE_KEYGUARD时,Min目标必须小于14

Related of "IllegalArgumentException:添加窗口后无法更改窗口types"

尝试使用这个窗口:

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

我遇到了同样的问题。 但停止添加后

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

super.onCreate(savedInstanceState);之前super.onCreate(savedInstanceState);BaseActivity ,它运作良好。 我在super.onCreate(savedInstanceState);之前剪切并粘贴了上面的代码super.onCreate(savedInstanceState); BaseActivity的下降。

顺便说一句,我不认为你必须调用super.onAttachedToWindow(); Activity生活圈里面的方法。 因为onAttachedToWindow(); 当您覆盖View时视图附加到窗口时被调用。

我也有这个问题,但我通过删除窗口,改变参数,然后再次添加窗口来解决它。 这对我来说已经够好了。

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

抱歉回复晚了。 你应该添加:

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

onCreate方法,如果你使用的API级别15或以上。 这个对我有用。