我有一个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)
这是明智的做法吗?如果屏幕方向在锁定时确实发生了变化,它会在解锁时立即感知到方向的变化吗?
还有替代品吗?
我建议您的对话框应该覆盖onSaveInstanceState()并将onRestoreInstanceState(Bundle)其状态保存到捆绑包中。
然后,您在活动中重写这些方法,检查对话框是否显示,如果显示,则调用对话框的方法来保存和恢复其状态。
如果您从片段显示此对话框,您将需要覆盖OnActivityCreated(Bundle)而不是OnRestoreInstanceState.
有关源示例,请参阅 Android 提供的内置时钟应用程序,其中SetAlarm Activity以这种方式处理 TimePickerDialog。
| 归档时间: |
|
| 查看次数: |
5717 次 |
| 最近记录: |