我已经尝试了建议here,建议here,建议here,我已经在我的Base活动中注释掉了onAttachedToWindow()。我有两个继承自这个类的活动,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)
编辑SDK :如果我更改为目标API 12,并将所有来自onCreate
的更改放入到onAttachedToWindow
中,我可以让这个异常消失,但我希望目标SDK为19。
My onCreate():
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
...
}
My 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。
Answer Min target must be less than 14 when WindowManager.LayoutParams.TYPE_KEYGUARD used
发布于 2015-07-07 13:01:42
尝试对window使用此命令:
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_adjectives);
发布于 2015-07-07 16:39:37
我也遇到了同样的问题。但是在停止添加之后
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);
之前,它工作得很好。我剪切并粘贴了上面的代码之前的BaseActivity
下降的super.onCreate(savedInstanceState);
。
顺便说一句,我不认为你必须在Activity
的生命周期内调用super.onAttachedToWindow();
。因为在重写View
时将视图附加到窗口时会调用onAttachedToWindow();
。
发布于 2016-01-21 06:31:08
我也有这个问题,但我通过删除窗口,更改参数,然后再次添加窗口来解决它。这对我来说已经足够了。
WindowManager.removeView(View); params = params2; //changed the params to something else WindowManager.updateViewLayout(View, params); WindowManager.addView(View, params);
https://stackoverflow.com/questions/31081968
复制相似问题