android - 卡住屏幕方向

标签 android screen-orientation android-screen

CheckBox 的代码如下:

    CheckBox cb = (CheckBox)findViewById(R.id.freezer);
    cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
            } else {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
            }
        }
    });

因此,当我检查它时,屏幕会旋转到默认系统方向(我的平板电脑为横向)。

我需要卡住当前方向。如果您将设备转为纵向并切换 CheckBox,则必须忽略设备旋转,直到取消选中 CheckBox。

Display.getRotation() 不是解决方案,因为每个设备都有自己的 Surface.ROTATION

最佳答案

所以,这是我的解决方案。

private int getCurentOrientation() {
    Display d = ((WindowManager) getSystemService(WINDOW_SERVICE))
            .getDefaultDisplay();
    boolean isWide = d.getWidth() >= d.getHeight();
    switch (d.getRotation()) {
    case Surface.ROTATION_0:
        return isWide ? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
                : ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
    case Surface.ROTATION_90:
        return isWide ? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
                : ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
    case Surface.ROTATION_180:
        return isWide ? ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE
                : ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
    case Surface.ROTATION_270:
        return isWide ? ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE
                : ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
    }
    return -1;
}

private void lockOrientation(boolean lock) {
    if (lock) {
        setRequestedOrientation(getCurentOrientation());
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
    }
}

在 4 台设备(2 台智能手机和 2 台平板电脑)上它可以正常工作。

关于android - 卡住屏幕方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10309588/

相关文章:

java - 单击按钮时如何设置计时器?

php - 如何在网页和 Android 应用程序之间传输数据

android - 从 fragment 调用日期选择器

android - 如何锁定应用程序方向(横向或纵向)?

android - 在 Android 上禁用屏幕旋转

android studio 从默认键盘打开表情符号键盘

android:webView 处理方向变化

android - 如何让 Android 应用程序在特定屏幕尺寸和特定操作系统上运行……?

android - 以编程方式截取 Android 设备中当前屏幕的屏幕截图?

Android:未正确报告屏幕密度