Screen Orientation Problem

  • Hallo,


    ich möchte in meiner App auf die Bildschirmorientierung reagieren und habe in der entsprechenden Activity deshalb folgenden Code eingefügt:
    [code]
    @Override
    protected void onResume()
    {
    super.onResume();
    Toast.makeText(this, "orientation: " + this.GetScreenOrientationMode(), Toast.LENGTH_SHORT).show();
    }


    private String GetScreenOrientationMode()
    {
    Display getOrient = getWindowManager().getDefaultDisplay();
    int orientation = getOrient.getOrientation();


    switch(orientation)
    {
    case Configuration.ORIENTATION_PORTRAIT:
    return "portrait";
    case Configuration.ORIENTATION_LANDSCAPE:
    return "landscape";
    case Configuration.ORIENTATION_SQUARE:
    return "square";
    default:
    return "undefined";
    }
    }[
    /code]


    Ich benutze den Code in einem Emulator. Der zeigt mir im Portrait-Modus aber "undefined" und im Landscape-Modus "portrait". Was läuft denn da verkehrt? :)


    Kann es am Emulator liegen oder ist mein Code schlichtweg falsch? Habe zur Zeit leider kein echtes Gerät zur Hand.


    MfG
    wax

  • Hallo,


    Display.getRotation gibt dir nicht ein Element aus Configuration sondern Konstanten aus Surface (also Surface.Rotation_0, Surface.Rotation_180 usw.) zurück.


    Du vergleichst also Äpfel mit Birnen. Daher die scheinbar falsche Ausgabe deinen Programms.


    nachdenklich

  • Hallo,


    ja, du benutzt getOrientation() aber getRotation() delegiert an getOrientation() und hat demnach auch die gleichen Rückgabewerte. Siehe auch die Sourcen aus dem Android-SDK:



    nachdenklich

  • Hallo, danke erstmal!


    Damit lässt´s sich arbeiten.


    Stellen wir uns mal vor meine App läuft auf einem Smartphone und einem Tablet. Nun haben diese beiden Geräte ja in der Regel eine unterschiedliche "natürliche" Ausrichtung. Meine betreffende Activity ist so ausgelegt, dass sie nur im Landscape Modus bedient werden kann.


    Wenn beide Geräte sich im Landscape-Modus befinden, wären die Ergebnisse von getRotation():


    1. Smartphone: 90° oder 270°
    2. Tablet: 0° oder 360°?


    Ich könnte in der Activity also nicht klar sagen ob sich das Gerät im Landscape-Modus befindet oder nicht, wenn ich nicht weiß ob es sich um ein Smartphone oder ein Tablet handelt bzw. wie die natürliche Ausrichtung des Geräts ist.


    Wie macht man so etwas? Also fragt man dann die natürliche Ausrichtung ab oder gibt es bessere Wege festzustellen das mein Gerät im Landscape-Modus unterwegs ist?


    MfG
    wax

  • Dann musst du wohl oder übel das Seitenverhältnis selber ausrechnen mit myMainView.getHeight() und getWidth (ACHTUNG: die liefern int - unbedingt auf auf double casten) und dann dividieren: height/width.


    Wenn es größer 1.1 ist, dann ist es portrait, kleiner 0.9 landscape und ansonsten der noch nicht erfundene Android-Bierdeckel im quadratischen Format...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!