首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >IllegalArgumentException:添加窗口后不能更改窗口类型

IllegalArgumentException:添加窗口后不能更改窗口类型
EN

Stack Overflow用户
提问于 2015-06-27 04:52:45
回答 5查看 14.9K关注 0票数 21

我已经尝试了建议here,建议here,建议here,我已经在我的Base活动中注释掉了onAttachedToWindow()。我有两个继承自这个类的活动,BaseActivity。一个运行,另一个不运行。会有什么不同呢?我的目标SDK是19;将其更改为12没有什么不同。下面是我的BaseActivity onCreate:

代码语言:javascript
复制
    @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(),然后崩溃。

可能的问题是什么?

堆栈跟踪:

代码语言:javascript
复制
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():

代码语言:javascript
复制
@Override
protected void onCreate(Bundle savedInstanceState) {

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

My onAttachedToWindow():

代码语言:javascript
复制
@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

EN

回答 5

Stack Overflow用户

发布于 2015-07-07 13:01:42

尝试对window使用此命令:

代码语言:javascript
复制
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                     WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_adjectives);
票数 7
EN

Stack Overflow用户

发布于 2015-07-07 16:39:37

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

代码语言:javascript
复制
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
requestWindowFeature(Window.FEATURE_NO_TITLE);

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

顺便说一句,我不认为你必须在Activity的生命周期内调用super.onAttachedToWindow();。因为在重写View时将视图附加到窗口时会调用onAttachedToWindow();

票数 2
EN

Stack Overflow用户

发布于 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);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31081968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档