Was ich habe:getLocationOnScreen kehrt alte Position nach einer Drehung
- Eine Aktivität mit
android:configChanges="orientation|screenSize|keyboardHidden"
- A DialogFragment auf sie
- ViewA auf DialogFragment
Was ist das Problem:
Ich verwende ViewA.getLocationOnScreen
, um den Standort auf dem Bildschirm der Ansicht zu erhalten. Wenn ich den Dialog zum ersten Mal öffne, ist die Position korrekt. Nachdem ich den Bildschirm gedreht habe, aktualisiert die Ansicht aufgrund von android:configChanges
ihre Position irgendwie nicht, und selbst wenn der Dialog in der Aktivität richtig zentriert ist, verweist der getLocationOnScreen von ViewA auf den älteren Speicherort vor der Rotation.
Was ich versucht habe.
overrode ich die onConfigurationChanged
des Dialogs und versucht, dies:
ViewA.requestLayout
(nichts tun)ViewA.getViewTreeObserver().addOnGlobalLayoutListener
und auf die onGlobalLayout die topmargin auf 1 gesetzt und wieder requestLayout nennen. (Dies funktioniert, aber ich will nicht die Marge setzen, jedesmal wenn ich den Bildschirm drehen)
Was ich möchte wissen, ist, wie kann ich die Neupositionierung des Dialogs erzwingen, so dass getLocationOnScreen die richtigen Werte nach einer Rückkehr
RotationBitte beachte, dass ich nicht will android:configChanges
rufen Sie in der Lage sind, einige Ihres Code zu schreiben? Insbesondere der Code, der sich auf _when_ bezieht, überprüfen Sie "getLocationOnScreen". [Dies] (http: // stackoverflow.com/questions/13243914/getlocationonscreen-in-oncreate-just-returns-Nullen) ist nicht ganz dein Problem, aber ich frage mich, ob es eine ähnliche Ursache hat. – mpkuth
Nein, das ist nicht der Fall. Die Ansicht ist bereits gezeichnet und korrekt positioniert. Das Problem ist mit 'android: configChanges', das die Aktivität Erholung deaktiviert. In diesem Fall wird der Dialog nicht zerstört, da die Aktivität nicht zerstört wird. Deshalb bleibt die Position der Ansicht die alte. Es ist kein Code erforderlich, da dies einfach zu reproduzieren ist. –