2012-01-08 35 views
2

我正在使用MonoDroid,但等效的Java答案仍然可以提供幫助。檢測OnPause中的屏幕方向更改()

我正在使用縱向佈局和橫向佈局,因此,如果可能的話,我想使用Android屏幕方向自動創建/刪除活動。

我的應用程序,以便在使用TextToSpeech我來控制它的活動的OnPause(),當Home鍵被按下或來電正在發生的效果很好。不過,我不想停止TextToSpeech屏幕方向更改從用戶。

是否有一個簡單的方法來檢測此更改,以便TextToSpeech不會中斷?

我的活動的OnStop()代碼:

protected override void OnPause() 
{ 
    // I need this for Home key, intercepting phone calls, etc. 
    // But how can I prevent this for a screen orientation change? 
    // Need to enable screen orientation to get my portrait/landscape views 
    if(Text2Speech.IsTextToSpeechInitialised && Text2Speech.TextToSpeech != null) 
     Text2Speech.TextToSpeech.Stop(); 

    base.OnPause(); 
} 
+3

你有沒有看使用Android的'表現?這指定您要自己處理方向更改。在你的Activity中覆蓋'onConfigurationChanged'並做任何你可能需要做的事情(改變佈局等)。 – Squonk 2012-01-08 08:51:08

+0

我看到了,它可能是我必須去的方法。如果可能的話,我希望Android能夠在銷燬我的肖像活動/創建景觀活動時爲我處理所有這些問題,反之亦然。我只是想知道是否有一個簡單的方法來檢測OnPause期間的方向變化() – 2012-01-08 09:06:23

+1

否,沒有簡單的方法知道。 「活動」生命週期受各種因素影響(例如來電)。在「活動」的「退出」階段(暫停,停止銷燬),沒有系統機制來解釋發生這種情況的原因。你得到的最好的是自己處理變化。傳遞給'onConfigurationChanged(...)'的'Configuration'對象至少可以幫助你識別這是一個方向改變,在這一點你只需要使用'setContentView(...)'以正確的佈局。這很費勁但不是太糟糕。 – Squonk 2012-01-08 09:53:27

回答

3

正如其他人關於該問題的評論說,我想你會要處理的配置變化在這裏自己。有other configuration changes也可能導致您的活動重新啓動,如顯示設備的硬件鍵盤。

在單爲Android,你可以指定要處理自己在這些的ActivityAttribute:在configChanges =「方向」`你`Activity`:

[Activity(ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.KeyboardHidden)] 
public class MainActivity : Activity 
+1

感謝大家的所有答案。它證實沒有簡單的方法來做到這一點,但我自己處理方向變化將是最好的 – 2012-01-09 08:53:13

+0

正如你所知,我轉換了處理這個問題的所有Java方法。 Android在循環中重新創建Activity,因此對前一個上下文的任何引用都會導致崩潰。我嘗試了所有的Java解決方案,其中沒有一個在Mono for Android中工作得很好,主要是因爲有兩個GC。至少在Android的Mono中,最好的方法就是這樣,只要你非常勤奮地清理你的OnDestroy中的資源,你應該百分百的確定! – emalamisura 2012-01-19 20:40:08

+0

@Greg,謝謝你的回答。你知道API 13和更高版本需要什麼ConfigurationChanges等效的screenSize嗎?在第二個問題中引用[鏈接](http://stackoverflow.com/questions/5620033/onconfigurationchanged-not-getting-called)? – TChadwick 2012-10-11 22:02:22