如何使应用程序忽略屏幕方向更改?

时间:2009-09-11 12:11:31

标签: android

有没有办法让应用程序完全忽略屏幕方向更改?

7 个答案:

答案 0 :(得分:58)

当键盘打开/关闭时,可以非常轻松地覆盖默认行为并禁止屏幕方向更改。

修改清单

打开清单,切换到“应用程序”选项卡,然后为方向更改行为选择要覆盖的所需活动。

  1. 在属性中,您需要更改两个字段:   屏幕方向:选择纵向或横向 - 根据需要选择。这将是默认布局。

  2. 选择要覆盖的配置更改的事件:   在这种情况下,这些是键盘隐藏和方向。

  3. 修改活动实施

    现在您需要覆盖所需活动中的单个功能。

    只需将以下功能添加到您的Activity类中。

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    }
    

    如果使用Source->Override/Implement Methods,这是默认实现 菜单选项。

    就是这样!现在,您的方向将始终保持。

    请记住,此设置是针对每个活动的 - 因此您需要为每个要禁止方向更改的活动重复此步骤!

    (基于SDK 1.1)

答案 1 :(得分:28)

您可以使用以下行(在活动中调用)对代码进行相同的更改:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

拨打此电话后,您的应用程序将保持横向(或纵向)模式。您可以使用相同的调用(使用不同的ActivityInfo枚举)使其对方向移动再次敏感。

Developing Orientation-Aware Android Applications 中有关于该主题的完整DevX文章。

(警告:因为我发布了这个链接,DevX已经建立了一个注册墙。)

答案 2 :(得分:21)

如果您按AndroidManifest.xmlsetRequestedOrientation(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"/>

答案 3 :(得分:14)

您可以在AndroidManifest.xml文件中定义您的活动,如下所示:

<activity 
    android:name=".MyActivity" 
    android:screenOrientation="portrait"
    android:configChanges="orientation|keyboardHidden|keyboard"/>`

在这种情况下,您应该为每个活动设置属性。我没有为所有应用程序找到内联解决方案。

答案 4 :(得分:2)

<activity  android:screenOrientation="portrait"></activity>

答案 5 :(得分:2)

将此添加到活动:

android:configChanges="orientation|screenSize"

答案 6 :(得分:1)

你想要读取当前的方向,并在整个活动的整个生命周期中保持这种方式,所以我在onCreate结束时做了以下工作:

// 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);