我使用了两种方法:
我的方法几乎每次都是捕获旋转事件,如果需要调用setContentView并再次添加一些组件.如果没有,只需让它旋转,布局设计适应.
到目前为止,我只看到了在具有非常动态的非常复杂结构的屏幕上销毁它的优点,并且每当我旋转而不是破坏时,在重新构建屏幕时显示出一些闪烁.
必须通过onSaveInstance,onRestoreInstace传递状态的开销有时非常容易出错,并且不知何故耗时.
我错过了什么吗?
更新:
我的代码中没有"Orientation.XPTO == ...".这是两种方法中的每一种的逻辑(代码被重用):
在摧毁时
onCreate -> DrawUI() setContentView and add views -> fill() add content
Run Code Online (Sandbox Code Playgroud)
不销毁时:
onCreate -> DrawUI() setContentView and add views -> fill() add content
onRotation -> DrawUI() setContentView and add views -> fill() add content
Run Code Online (Sandbox Code Playgroud)
在轮换后调用setContentView时,它将为设备方向选择正确的布局(通过Google的Reto Meier检查此答案/sf/answers/31984291/)
并且DrawUI和fill必须具有纵向和横向布局的逻辑,因为可以在两个方向中的每一个上创建活动以开始.
Com*_*are 10
我错过了什么吗?
是.您假设您的替代方案不太容易出错.
通过不进行销毁和重新创建循环,您必须确保为每个可能的配置更改处理更改每个资源.
不要让活动在轮换时被破坏
除非您使用android:screenOrientation强制活动进入单一方向(例如landscape),否则您不仅可以处理与旋转相关的配置更改.您需要处理所有配置更改.否则,只要用户将设备放入扩展坞,将其从扩展坞中移除,更改语言设置,附加或分离键盘,更改全局字体缩放等,您的应用就会中断.
反过来,这意味着在每次配置更改时,您需要:
PreferenceFragment)问题是你会忘记一些事情.例如,您将错过更改与操作栏项关联的字符串,因此现在大部分UI都是西班牙语,操作栏项目是英语.你将要忘记的事情将不那么明显(你多久经常测试一下你的西班牙语翻译?).
| 归档时间: |
|
| 查看次数: |
2095 次 |
| 最近记录: |