7个解决方案

58 votes

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

修改清单

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

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

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

修改Activity实现

现在,您需要覆盖所需Activity中的单个函数。

只需将以下函数添加到Activity的类中即可。

@Override

public void onConfigurationChanged(Configuration newConfig) {

super.onConfigurationChanged(newConfig);

}

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

而已! 现在,您的方向将始终保持。

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

(基于SDK 1.1)

Marcin Gil answered 2019-06-24T16:28:07Z

28 votes

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

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

关于开发方向感知Android应用程序的主题,有一篇完整的DevX文章。

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

haseman answered 2019-06-24T16:29:08Z

21 votes

如果您通过setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);或setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);进行设置,则会遇到平板电脑问题。 他们的自然/默认方向是风景。

如果您真的想完全忽略屏幕方向更改,我会使用此值setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);。 我在Stack Overflow问题Android自然传感器定位帮助中详细介绍了它。

这是xml:

android:name=".MyActivity"

android:screenOrientation="nosensor"

android:configChanges="orientation|keyboardHidden|keyboard"/>

bytebender answered 2019-06-24T16:29:58Z

14 votes

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

android:name=".MyActivity"

android:screenOrientation="portrait"

android:configChanges="orientation|keyboardHidden|keyboard"/>`

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

FeelGood answered 2019-06-24T16:30:38Z

2 votes

Mat answered 2019-06-24T16:30:58Z

2 votes

将此添加到活动:

android:configChanges="orientation|screenSize"

Don Larynx answered 2019-06-24T16:31:39Z

1 votes

你想要阅读当前的方向,并在整个活动的整个生命周期中保持这种方式,所以我在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);

Michael Boccara answered 2019-06-24T16:32:10Z