Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使应用程序忽略屏幕方向的更改?_Android - Fatal编程技术网

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

Android 如何使应用程序忽略屏幕方向的更改?,android,Android,有没有办法让应用程序完全忽略屏幕方向的更改?当键盘打开/关闭时,可以很容易地覆盖默认行为并禁止屏幕方向的更改 修改清单 打开清单,切换到“应用程序”选项卡,然后选择要为方向更改行为覆盖的所需活动 在属性中,您需要更改两个字段: 屏幕方向:选择纵向或横向-以所需为准。这将是默认布局 为要覆盖的配置更改选择事件: 在这种情况下,这些是键盘隐藏和方向 修改活动实施 现在,您需要覆盖所需活动中的单个函数 只需将下面的函数添加到活动的类中 @Override public void onConfigura

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

当键盘打开/关闭时,可以很容易地覆盖默认行为并禁止屏幕方向的更改

修改清单

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

  • 在属性中,您需要更改两个字段: 屏幕方向:选择纵向或横向-以所需为准。这将是默认布局

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

  • 修改活动实施

    现在,您需要覆盖所需活动中的单个函数

    只需将下面的函数添加到活动的类中

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    }
    
    如果使用
    Source->Override/Implement方法
    菜单选项

    就这样!现在你的方向将永远保持不变

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


    (基于SDK 1.1)

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

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

    中有一篇关于这个主题的完整DevX文章


    (警告:由于我已经发布了此链接,DevX已经设置了注册墙。)

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

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

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

    如果您通过
    AndroidManifest.xml
    或使用
    setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u Grait)进行设置平板电脑将遇到问题。它们的自然/默认方向是横向


    如果你真的想完全忽略屏幕方向的变化我会使用这个
    setRequestedOrientation(ActivityInfo.screen\u orientation\u NOSENSOR)值。我在这个问题上谈得更多

    以下是xml:

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

    您希望阅读当前方向,并在活动的整个生命周期中保持这种方式,因此,在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);
    

    将以下内容添加到活动中:

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    

    android:configChanges=“orientation | screenSize”

    并不是简单地调用超类就不会改变任何东西吗?我只是在玩一些非常类似的东西——我认为对清单文件的更改是足够的,至少对我来说是足够的(正如Matthias指出的,这似乎是合乎逻辑的)。若清单中的更改足以锁定方向,则onConfigurationChanged()的目的是什么?至于我的测试:如果您只更改清单,而不重写onConfigurationChanged函数,则将调用onCreate()和整个活动生命周期事件。如果您要更改清单并覆盖onConfigurationChanged函数,它将不会被调用。这是我在Android 2.2中使用的唯一答案。谢谢只需注意,安卓1.5中显然存在一个bug。如果您使用自定义屏幕大小(例如800x480,如Apad上的)并强制将其横向显示(通过XML或从代码中),那么它实际上是纵向显示的。如果您想从代码中锁定和解锁方向(更灵活),您可以从中调用
    screen.lockOrientation(this)
    这不会旋转屏幕。我不确定我是否遵循。。。这就是避免旋转屏幕的要点。“完全忽略屏幕方向的变化”意味着旋转时,数据将保持不变。
    // 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);