如何使用@ ActivityInfo.ScreenOrientation

时间:2015-02-17 08:33:32

标签: java android annotations

我尝试创建一个方法,返回我依赖的screenorientation 设备是掌上电脑还是平板电脑。

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中声明为公开。

2 个答案:

答案 0 :(得分:9)

将以下注释置于烦人的陈述之上,其中触发@IntDef and @StringDef annotation的魔术常数检查,例如:

//noinspection ResourceType
setRequestOrientation(lock);

答案 1 :(得分:0)

尝试使用注释@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;
}