以编程方式锁定特定操作的屏幕方向为纵向

48

是否有一种编程方式可以在某些操作期间程序化地锁定应用程序为纵向模式,然后在操作完成后恢复(并且如果用户将设备保持在横向方向,则使应用程序旋转为横向模式)?

3个回答

99

试一下这个:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//Do your operation
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

1
我不得不使用 SCREEN_ORIENTATION_SENSOR_PORTRAIT 而不是 SCREEN_ORIENTATION_SENSOR - Julien Kronegg
2
如果用户持有一个反向纵向的平板电脑,这将更改方向为纵向,然后再次更改为传感器。因此,我可以使用getResources().getConfiguration().orientation获取方向值,但它对于纵向和反向纵向都返回1....我该如何获取正确的方向?谢谢 - AL̲̳I
2
我现在正在使用 orientation = getRequestedOrientation(); 这个语句,它会返回正确的屏幕方向数值...这可能会帮助到其他人 :) - AL̲̳I
你可以使用 ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED 来取消应用程序的方向偏好设置。而 ActivityInfo.SCREEN_ORIENTATION_SENSOR 则会覆盖用户配置,以优先选择硬件方向。 - Abandoned Cart

4

我稍微理解了一下你的问题,如果你遇到的问题是重新加载活动导致问题,你可以在清单中添加一行代码来自己处理方向变化。如果你想为方向变化做一些特殊处理,你可能需要这样做,但也许只需添加这些代码就可以解决你的问题:

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

0

如果您想将屏幕仅设置为纵向,请在Activity的OnCreate方法中使用此代码

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

如果您只想使用橫向模式,請使用此行程式碼。
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

这一行就足够了

像下面这样

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接