2
目前,我有一個家長Activity
,其取向可以是橫向模式或縱向模式,具體取決於設備加速度計。將活動恢復到其原始方向的正確方法
它將啓動一個小孩Activity
,它的方向始終處於橫向模式。
當用戶退出子女Activity
時,我可以立即恢復其原始方向。
我嘗試下面的神話。它不起作用。
public class ParentActivity extends SherlockFragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
if (savedInstanceState == null) {
} else {
int orientation = savedInstanceState.getInt(ORIENTATION_KEY);
// **Orientation is completely detached from Accelerometer**
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
@Override
protected void onSaveInstanceState (Bundle savedInstanceState) {
// Calling super.onSaveInstanceState is important.
super.onSaveInstanceState(savedInstanceState);
// **Too late**
int orientation = getResources().getConfiguration().orientation;
savedInstanceState.putInt(ORIENTATION_KEY, orientation);
}
}
有2個問題的代碼
- 太晚了 - 當景觀孩子
Activity
啓動,和家長Activity
的onSaveInstanceState
被調用,獲得的定向值始終景觀,雖然父母Activity
原本是在肖像模式下。 - 方向與加速度計完全分離 - 一旦調用
setRequestedOrientation
,父方Activity
方向將被固定,不再依賴於設備加速度計。我的意圖是在孩子Activity
已退出之後恢復父母Activity
初始方向。之後,通過旋轉設備,我們仍然可以隨父母Activity
方向自由玩耍。
可以爲您節省在開始子Activity之前的方向。您可以在您調用子Activity中的完成方法之後立即恢復它。也許它可以做到這一點。 –
是的。您的建議將解決**太晚**問題。但是,**方向在調用'setRequestedOrientation'後是否完全脫離了Accelerometer **? –
因此,您不再能夠在退出子Activity之後旋轉設備並獲取相應的屏幕方向?這很奇怪。似乎在清單文件中存在一些錯誤配置,但當然你已經檢查過了......是嗎?不,這不是問題所在,否則即使在致電兒童Activit之前,您也無法獲得方向更改。 –