2011-04-06 65 views
1

在My Manifest.xml文件中,如果我的MyActivity有以下'android:configChanges',它不会在res/layout-land中选取我的布局文件当我将手机旋转到横向模式时。Android没有选择res/layout-land中的布局文件

<activity 
     android:name="MyActivity" 
     android:configChanges="orientation|keyboard|keyboardHidden"> 
    </activity> 

请问您能告诉我该如何解决?

谢谢。

+0

发布您的完整清单文件... – 2011-04-06 16:52:28

回答

4

通过在configChanges中包含方向,您将禁用默认的布局更改行为,即以新方向重新开始您的活动。

您需要手动更改在onConfigurationChanged中获取CONFIGURATION_LANDSCAPE/CONFIGURATION_PORTRAIT时使用的布局。

请注意,根据the Activity docs,onConfigurationChanged是“最后的选择”选项 - 通常更好的是保持状态并让系统重新启动您的应用程序。

最良好的祝愿,

菲尔Lello

4

不知道其他的Manifest或你的活动,我只能说从android:configChanges中删除了“orientation”。这将禁用方向更改。

2

我明白想要重复的最佳实践,但这些答案并不一定能解决问题。我也同意这些最佳做法。不幸的是,他们无法在所有情况下实践。

我会考虑OP所说的问题是Android中的一个错误。说我将在这个活动中处理“configChanges”到Android意味着,如果配置发生变化,请不要终止我的活动。使用“更改”一词并不意味着传递给Activity的初始配置将被Activity忽略。要么改变措词,要么活动应该在原始配置中处理正确的方向。

解决方法是通过手动检查方向手动选择适当的布局文件。实质上,不要在configChanges =“orientation | keyboard | keyboardHidden”的配置中使用-land bucket,则会忽略land bucket。

// done in onCreate 
int desiredLayoutId; 
int orientation = getResources().getConfiguration().orientation; 
if (orientation == Configuration.ORIENTATION_LANDSCAPE) { 
    desiredLayoutId = R.layout.some_layout_landscape; 
} else { 
    desiredLayoutId = R.layout.some_layout_portrait; 
} 
setContentView(desiredLayoutId); 

再说一遍,我不喜欢这样,但如果你是在“不得已而为之”,并决定于管理自己的方向,你可以按照我提供的,以获得适当的布局文件中的代码。一个可能的用例可能是在创建一个流式视频的活动时,该视频不应该在屏幕旋转时卸载并重新加载。