studio reales proyectos programacion introducción incluye guia fuente desarrollo código avanzado aplicaciones android android-activity android-windowmanager

reales - manual programacion android



IllegalArgumentException: el tipo de ventana no se puede cambiar después de agregar la ventana (5)

Lo siento por la respuesta tardía. Usted debe agregar:

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

en el método onCreate si está utilizando api nivel 15 o superior. Esto funciona para mi.

He probado el consejo here , el consejo here , el consejo here , he comentado el onAttachedToWindow () en mi actividad base. Tengo dos actividades heredadas de esta clase, BaseActivity. Uno corre, y otro no. ¿Cuál podría ser la diferencia? Mi SDK de destino es 19; cambiarlo a 12 no hace ninguna diferencia. Aquí está mi onCreate para BaseActivity:

@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); .... }

Al navegar a la segunda actividad, pasar por el código, lo hace a través de onCreate (), onResume (), y luego se bloquea.

¿Cual podría ser el problema?

Stacktrace:

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)

EDITAR : si cambio a la API 12 de destino y pongo todos los cambios de onCreate en onAttachedToWindow , puedo hacer que desaparezca esta excepción, pero me gustaría que el SDK de destino fuera 19.

Mi nuevo onCreate ():

@Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); ... }

Mi nuevo onAttachedToWindow ():

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

Esto solo funciona con la API de destino 12.

El objetivo de respuesta mínima debe ser inferior a 14 cuando se utiliza WindowManager.LayoutParams.TYPE_KEYGUARD


Me encuentro con la misma pregunta. Pero después de dejar de añadir

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

antes de super.onCreate(savedInstanceState); De BaseActivity , funciona bien. Corté y super.onCreate(savedInstanceState); códigos anteriores antes de super.onCreate(savedInstanceState); de descendientes de BaseActivity .

Por cierto, no creo que tengas que llamar a super.onAttachedToWindow(); Dentro de los métodos del círculo de vida de la Activity . Porque onAttachedToWindow(); se llama cuando la vista se adjunta a una ventana al anular una View .


También tuve este problema, pero lo resolví eliminando la ventana, cambiando los parámetros y luego agregando la ventana nuevamente. Esto fue lo suficientemente bueno para mí.

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


Trate de usar esto para la ventana:

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


retirar

this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG|WindowManager.LayoutParams.FLAG_FULLSCREEN);

Desde su onAttachedToWindow() , así:

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