如何使用@ ActivityInfo.ScreenOrientation

我试图创build一个方法,返回给我的屏幕取决于依赖的设备是手持式还是平板电脑。

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

但是,当我使用setRequestedOrientation(getScreenOrientation)); 我得到一个lint错误Must be one of: ActivityInfo.SCREEN_ORIENTATION_.........其中我可以压制,但看起来不干净的代码。

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

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

但IDE给了我一个错误,指出无法findAnnotation @ActivityInfo.ScreenOrientation 。 但是它在官方的android源代码中被公开。

Solutions Collecting From Web of "如何使用@ ActivityInfo.ScreenOrientation"

把下面的注释放在令人讨厌的语句上面,在这个语句中,触发@IntDef和@StringDef注解的魔术常量检查,例如:

 //noinspection ResourceType setRequestOrientation(lock); 

改为使用注解@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; }