打开对话框时如何处理屏幕方向更改?

loc*_*cka 11 java android

我有一个Android应用程序,它已经处理了方向的更改,即android:configChanges="orientation"清单和onConfigurationChange()活动中的处理程序切换到适当的布局并准备它.我有一个横向/纵向版本的布局.

我面临的问题是活动有一个对话框,当用户旋转设备方向时,该对话框可以打开.我还有对话框的横向/纵向版本.

我是否应该动态更改对话框的布局,或者锁定活动的旋转,直到用户解除对话框为止.

后一个锁定应用程序的选项吸引我,因为它节省了在对话框中做任何特殊事情.我想我可能会在对话框打开时禁用方向,例如

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
Run Code Online (Sandbox Code Playgroud)

然后当它解散

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
Run Code Online (Sandbox Code Playgroud)

这是明智的做法吗?如果屏幕方向在锁定时确实发生了变化,它会在解锁时立即感知到方向的变化吗?

还有替代品吗?

Ami*_*ski 0

我建议您的对话框应该覆盖onSaveInstanceState()并将onRestoreInstanceState(Bundle)其状态保存到捆绑包中。

然后,您在活动中重写这些方法,检查对话框是否显示,如果显示,则调用对话框的方法来保存和恢复其状态。

如果您从片段显示此对话框,您将需要覆盖OnActivityCreated(Bundle)而不是OnRestoreInstanceState.

有关源示例,请参阅 Android 提供的内置时钟应用程序,其中SetAlarm Activity以这种方式处理 TimePickerDialog。