2015-02-17 13 views
7

Próbuję utworzyć metodę, która zwróci mi orientację ekranu w zależności od urządzenia to urządzenie podręczne lub tablet.Sposób korzystania @ ActivityInfo.ScreenOrientation

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

Ale gdy używam setRequestedOrientation(getScreenOrientation)); dostaję niestrzępiącą błąd Must be one of: ActivityInfo.SCREEN_ORIENTATION_......... które mogę stłumić, lecz nie wygląda na czysty kod.

Tak więc stwierdziłem, że getRequestedOrientation używa adnotacji @ActivityInfo.ScreenOrientation. Więc starałem się go używać sobie:

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

Ale IDE daje mi błąd informujący, że Adnotacja @ActivityInfo.ScreenOrientation nie może zostać odnaleziona. Ale jest publicznie ogłoszone w oficjalnym-androidowym źródle.

+1

Jestem w takiej samej sytuacji, a ja naprawdę nie rozumiem, dlaczego nie można użyć '@ ActivityInfo.ScreemOrientation' ... – tbruyelle

Odpowiedz

9

Umieść następujący komentarz powyżej irytujące rachunku gdzie jest wyzwalane magia stała kontrola dla @IntDef and @StringDef annotation, na przykład:

//noinspection ResourceType 
setRequestOrientation(lock); 
+1

Nie jestem największym fanem tłumienia błędu, ale działa i jest to lepsze niż pisanie 5 linii kodu w każdym działaniu. Dziękuję Ci! – Altoyyr

0

Zamiast tego spróbuj wpisać adnotację @IntegerRes. To powinno działać dobrze, ponieważ zwracasz atrybut zasobów całkowitych z android.R.attr.

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

Poniższy przykład działa dla mnie bez błędów IDE lub ostrzeżeń.

@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; 
} 
+1

Niestety, to nie działa. Wartości ScreenOrientation są ostatecznymi wartościami int, a nie zasobami. Tak więc IDE rzuci błąd w każdym wierszu! = 'Return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE' który jest 0 – Altoyyr

Powiązane problemy