有没有办法使应用程序完全忽略屏幕方向的改变?
当键盘打开或关闭时,很容易覆盖默认行为并禁止屏幕方向更改。
修改清单文件
打开清单文件,切换到应用程序选项卡,选择您希望覆盖方向更改行为的所需 Activity。
在Attributes中,您需要更改两个字段: 屏幕方向:选择所需的肖像或风景模式。 这将是默认布局。
选择要覆盖的Config更改事件: 在此情况下,这些是keyboardHidden和orientation。
修改Activity实现
现在,您需要覆盖所需 Activity 中的一个函数。
只需将以下函数添加到Activity类中即可。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
如果使用Source->Override/Implement Methods
菜单选项,则这是默认实现。
就是这样!现在您的方向将始终保持不变。
请记住,此设置针对每个活动 - 因此,您需要为希望禁止方向更改的每个活动重复此步骤!
(基于SDK 1.1)
你可以在代码中使用以下行执行相同的更改(在 activity 中调用):
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
一旦您进行这个调用,您的应用程序将保持横屏(或纵向)模式。您可以使用同样的调用(使用不同的ActivityInfo枚举)再次使其对方向变化敏感。如果你通过 AndroidManifest.xml
或者使用 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
来设置屏幕方向,那么在 平板电脑 上会遇到问题。它们的自然/默认方向是横向的。
如果你真的想要 完全忽略屏幕方向的更改,我建议使用 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
值。我在 Stack Overflow 问题 Android natural sensor orientation help 中有更多讨论。
这里是 XML 代码:
<activity
android:name=".MyActivity"
android:screenOrientation="nosensor"
android:configChanges="orientation|keyboardHidden|keyboard"/>
您可以在AndroidManifest.xml
文件中定义您的Activity,如下所示:
<activity
android:name=".MyActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden|keyboard"/>`
在这种情况下,您应该为每个活动设置属性。我没有找到适用于所有应用程序的内联解决方案。android:configChanges="orientation|screenSize"
该代码用于在屏幕旋转或屏幕尺寸发生变化时,避免重新启动活动。<activity android:screenOrientation="portrait"></activity>
// choose an orientation and stay in it
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Screen.lockOrientation(this)
。 - caw