手动重绘 Android 中的 ActionBar
Redraw ActionBar in Android manually
我有一个 Android 应用程序,布局可以横向和纵向使用。
在某些活动中有很多输入和选择,即使我旋转 phone,我也想保留它们。
我将此添加到清单中的 Activity
:
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
从纵向旋转到横向时输入保持不变,一切看起来都不错,除了我的 ActionBar
的 size/textsize。它不会改变。如果我在横向模式下启动 Activity
,文本会变小,但在旋转回纵向模式时当然不会变大。
有没有办法重绘 ActionBar
(比如 onConfigurationChanged()
之类的)或轻松保留我所有的输入。
在这种情况下使用 configChanges
是非常糟糕的做法。
是的,它会在方向更改时保留您的输入和状态,但您的 Activity
可能会因为其他原因而重新创建,例如当您的应用程序处于后台并且 OS决定杀死它以回收内存,然后您导航回它。
当您重新打开您的应用程序时,OS 将尝试重新创建您离开时的 Activity
,但会失败(很可能会导致崩溃)。
而不是使用 configChanges
属性,您应该将您的内容保存在 onSaveInstanceState()
中并从 onCreate()
中的 Bundle
恢复它。
查看有关此主题的 developer's guide。
我有一个 Android 应用程序,布局可以横向和纵向使用。
在某些活动中有很多输入和选择,即使我旋转 phone,我也想保留它们。
我将此添加到清单中的 Activity
:
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
从纵向旋转到横向时输入保持不变,一切看起来都不错,除了我的 ActionBar
的 size/textsize。它不会改变。如果我在横向模式下启动 Activity
,文本会变小,但在旋转回纵向模式时当然不会变大。
有没有办法重绘 ActionBar
(比如 onConfigurationChanged()
之类的)或轻松保留我所有的输入。
在这种情况下使用 configChanges
是非常糟糕的做法。
是的,它会在方向更改时保留您的输入和状态,但您的 Activity
可能会因为其他原因而重新创建,例如当您的应用程序处于后台并且 OS决定杀死它以回收内存,然后您导航回它。
当您重新打开您的应用程序时,OS 将尝试重新创建您离开时的 Activity
,但会失败(很可能会导致崩溃)。
而不是使用 configChanges
属性,您应该将您的内容保存在 onSaveInstanceState()
中并从 onCreate()
中的 Bundle
恢复它。
查看有关此主题的 developer's guide。