繁体   English   中英

在android中显示反向横向时如何锁定屏幕方向?

[英]How to Lock screen orientation when displaying reverse landscape in android?

我尝试锁定屏幕orientation Android中application.I二手下面的代码,以锁定屏幕方向,当特定按钮点击火灾。

// Inside button click

Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
 if (display.getOrientation() == 1) {
                   setRequestedOrientation(0);
 } else if (display.getOrientation() == 0) {
                   setRequestedOrientation(1);
 } else if (display.getOrientation() == 3) {
                   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
 }

上面的代码工作横向和纵向屏幕方向,但它不工作反向景观mode.In这种情况下,始终我的活动改变它的orientation ,以默认landscape mode.Also我注意到,当装置反向风景模式, display.getOrientation()总是返回 3。
我怎样才能找到这个问题的解决方案?

我一直在使用 API 8 处理同样的问题。看起来在 reserseLandscape 模式下,如果你调用

getResources().getConfiguration().orientation 

Android 将返回 2 (SCREEN_ORIENTATION_USER),它根本不会锁定方向。 实际上,即使该值确实存在,也没有为 ActivityInfo 类定义常量 SCREEN_ORIENTATION_REVERSE_LANDSCAPE。 对于我的应用程序,我最终创建了这个方法:

public void lockScreenOrientation() {
    switch (((WindowManager) getSystemService(WINDOW_SERVICE))
        .getDefaultDisplay().getRotation()) {
    case Surface.ROTATION_90: 
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
        break;
    case Surface.ROTATION_180: 
        setRequestedOrientation(9/* reversePortait */); 
        break;          
    case Surface.ROTATION_270: 
        setRequestedOrientation(8/* reverseLandscape */); 
        break;
    default : 
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    }
}

每当我需要锁定方向时我都会调用这个方法,然后我可以简单地释放它调用

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

希望能帮助到你。

public void lockScreenOrientation() {
    switch (((WindowManager) getSystemService(WINDOW_SERVICE))
        .getDefaultDisplay().getRotation()) {
    case Surface.ROTATION_90: 
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
        break;
    case Surface.ROTATION_180: 
        setRequestedOrientation(9/* reversePortait */); 
        break;          
    case Surface.ROTATION_270: 
        setRequestedOrientation(8/* reverseLandscape */); 
        break;
    default : 
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    }
}

autremoi 的答案对我有用,我创建了一个新答案,因为我的声誉还没有让我投票给他。

我的代码唯一的区别是我用另一个恢复了传感器

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

在您的 AndroidManifest 文件中,只需输入以下代码:

        android:configChanges="keyboard|orientation|keyboardHidden|screenSize"
        android:screenOrientation="reverseLandscape"

例子:

    <activity
        android:name="com.gaspar.slinfilipino.Quiz"
        android:label="@string/title_activity_quiz"
        android:configChanges="keyboard|orientation|keyboardHidden|screenSize"
        android:screenOrientation="reverseLandscape"
        android:parentActivityName="com.gaspar.slinfilipino.SignLanguageMenu" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.gaspar.slinfilipino.SignLanguageMenu" />
    </activity>

它对我有效。 希望能帮助到你!

我尝试了 autremoi 的答案,但它杀死了我的用户界面。 我找到了一个确实有效的答案,但是我发现它是混合的: https : //www.captechconsulting.com/blogs/programmatically-locking-android-screen-orientation

而这个: getSize() 给我错误的作品,并且应该在所有 Android 版本上。

setRequestedOrientation(lockOrientation());

快乐编码!

private int lockOrientation(){
    Display display = getWindowManager().getDefaultDisplay();
    int rotation = display.getRotation();

    Point size = new Point();
    size.x = display.getWidth();
    size.y = display.getHeight();

    int lock = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;

    if (rotation == Surface.ROTATION_0
            || rotation == Surface.ROTATION_180) {
        // if rotation is 0 or 180 and width is greater than height, we have
        // a tablet
        if (size.x > size.y) {
            if (rotation == Surface.ROTATION_0) {
                lock = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
            } else {
                lock = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
            }
        } else {
            // we have a phone
            if (rotation == Surface.ROTATION_0) {
                lock = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
            } else {
                lock = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
            }
        }
    } else {
        // if rotation is 90 or 270 and width is greater than height, we
        // have a phone
        if (size.x > size.y) {
            if (rotation == Surface.ROTATION_90) {
                lock = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
            } else {
                lock = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
            }
        } else {
            // we have a tablet
            if (rotation == Surface.ROTATION_90) {
                lock = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
            } else {
                lock = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
            }
        }
    }
    return lock;
}

嗨,如果你想要锁定屏幕方向,你必须设置清单文件

<activity android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait" android:name=".activities.HomeActivity"
        android:label="@string/app_name" android:theme="@style/Theme.Translucent">

尝试这个

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

如果你想要肖像

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM