J'ai essayé le conseil ici , le conseil ici , le conseil ici , j'ai commenté onOttachedToWindow () dans mon activité de base. J'ai deux activités héritant de cette classe, BaseActivity. On court, on ne court pas. Quelle pourrait être la différence? Ma cible SDK est 19; le changer en 12 ne fait aucune différence. Voici mon onCreate for 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);
....
}
Lors de la navigation vers la deuxième activité, en parcourant le code, il le fait via onCreate (), onResume (), puis se bloque.
Quel pourrait être le problème?
Trace de la pile:
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)
EDIT: si je passe à l'API cible 12 et que je mets toutes les modifications de onCreate
dans onAttachedToWindow
, je peux faire en sorte que cette exception disparaisse, mais j'aimerais que le SDK cible soit 19.
Mon new onCreate ():
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
...
}
Mon new onAttachedToWindow ():
@Override
public void onAttachedToWindow() {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
Cela ne fonctionne qu'avec l'API cible 12.
Essayez d'utiliser ceci pour la fenêtre:
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_adjectives);
Je me heurte à la même question. Mais après avoir arrêté d'ajouter
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
requestWindowFeature(Window.FEATURE_NO_TITLE);
avant super.onCreate(savedInstanceState);
of BaseActivity
, cela fonctionne bien. Je coupe et colle les codes ci-dessus avant super.onCreate(savedInstanceState);
des descendants de BaseActivity
.
BTW, je ne pense pas que vous deviez appeler super.onAttachedToWindow();
dans les méthodes de cycle de vie de Activity
. Parce que onAttachedToWindow();
est appelé lorsque la vue est attachée à une fenêtre lorsque vous remplacez une View
.
J'ai également eu ce problème, mais je l'ai résolu en supprimant la fenêtre, en modifiant les paramètres, puis en rajoutant la fenêtre. C'était assez bien pour moi.
WindowManager.removeView(View);
params = params2; //changed the params to something else
WindowManager.updateViewLayout(View, params);
WindowManager.addView(View, params);
Désolé pour la réponse tardive. Vous devriez ajouter:
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
dans onCreate method si vous utilisez un api de niveau 15 ou supérieur. Ça marche pour moi.
Retirer
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG|WindowManager.LayoutParams.FLAG_FULLSCREEN);
De votre onAttachedToWindow()
, comme ceci:
@Override
public void onAttachedToWindow() {
//this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG|WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onAttachedToWindow();
}