2012-01-08 59 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