如何使用@ActivityInfo.ScreenOrientation

How to use @ActivityInfo.ScreenOrientation

我尝试创建一个 returns 屏幕方向依赖于我的方法 设备是手持设备还是平板电脑。

public int getScreenOrientation(boolean isTablet){
    if(isTablet){
        return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
    } else {
        return ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
    }
}

但是当我使用 setRequestedOrientation(getScreenOrientation)); 时,我得到一个 lint-error Must be one of: ActivityInfo.SCREEN_ORIENTATION_.........,我可以抑制它,但这看起来不像干净的代码。

所以我发现,getRequestedOrientation 使用了 @ActivityInfo.ScreenOrientation 注释。所以我自己尝试使用它:

@ActivityInfo.ScreenOrientation
public int getScreenOrientation(boolean isTablet){
    .
    .
    .
}

但是 IDE 给我一个错误,说明找不到注释 @ActivityInfo.ScreenOrientation。但是它在官方-android-source.public中被声明为public。

请尝试注释 @IntegerRes。这对您来说应该没问题,因为您要从 android.R.attr.

返回一个整数资源属性

https://developer.android.com/reference/android/support/annotation/IntegerRes.html http://developer.android.com/reference/android/R.attr.html#screenOrientation

下面的示例对我有用,没有 IDE 错误或警告。

@IntegerRes
public static int getScreenOrientationPref() {
    if(sharedPreferences.getBoolean("LockOrientation", true)) {
        int orientation = sharedPreferences.getInt("Orientation", Configuration.ORIENTATION_LANDSCAPE);
        if(orientation == Configuration.ORIENTATION_LANDSCAPE) {
            return ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
        }
        else {
            return ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;
        }
    }
    return ActivityInfo.SCREEN_ORIENTATION_USER;
}

将以下注释放在触发 @IntDef and @StringDef annotation 的魔法常量检查的恼人语句上方,例如:

//noinspection ResourceType
setRequestOrientation(lock);