2015-02-17 6 views
7

Ich versuche, eine Methode zu erstellen, die mir die Bildschirmausrichtung zurückgibt ob das Gerät ein Handheld oder ein Tablet ist.Verwendung @ ActivityInfo.ScreenOrientation

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

Aber wenn ich setRequestedOrientation(getScreenOrientation)); verwenden erhalte ich einen Fussel-Fehler Must be one of: ActivityInfo.SCREEN_ORIENTATION_........., die ich unterdrücken kann, aber das sieht nicht so sauberen Code.

So fand ich, dass getRequestedOrientation die @ActivityInfo.ScreenOrientation Annotation verwendet. Also habe ich versucht, es zu benutzen, mich:

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

Aber der IDE gibt mir einen Fehler, der besagt, dass die Annotation @ActivityInfo.ScreenOrientation konnte nicht gefunden werden. Aber es wird öffentlich in der offiziellen Android-Quelle veröffentlicht.

+1

ich in der gleichen Situation bin und ich, mich verstehe wirklich nicht, warum kann '@ ActivityInfo.ScreemOrientation' nicht verwenden ... – tbruyelle

Antwort

9

gäbe folgenden Kommentar über der lästige Anweisung, wo die Magie konstante Inspektion für @IntDef and @StringDef annotation ausgelöst wird, zum Beispiel:

//noinspection ResourceType 
setRequestOrientation(lock); 
+1

Ich bin nicht der größte Fan der Unterdrückung des Fehlers, aber es funktioniert und es ist besser als 5 Zeilen Code in jeder Aktivität zu schreiben. Vielen Dank! – Altoyyr

0

Versuchen Sie stattdessen die Annotation @IntegerRes. Dies sollte für Sie gut funktionieren, da Sie ein Integer-Ressourcenattribut von android.R.attr zurückgeben.

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

Das folgende Beispiel für mich arbeitet ohne IDE Fehler oder Warnungen.

@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

Entschuldigung, das funktioniert nicht. Die ScreenOrientationValues ​​sind End-Ints und keine Ressourcen. Die IDE wird also bei jeder Zeile einen Fehler ausgeben! = 'Return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE' Das ist 0 – Altoyyr

Verwandte Themen