it-swarm.com.de

wie erkenne ich die Ausrichtung des Android-Geräts?

Ist es möglich, die aktuelle Ausrichtung eines Android-Geräts einfach zu ermitteln, ohne einen Listener zu programmieren und die Positionsmatrix zu bedienen? In meiner App möchte ich nur die aktuelle Ausrichtung - vertikal oder horizontal - im Moment kennen. Ich möchte jedoch keine Ereignisse der Axiometrie oder anderer Ereignisse hören.

45
Mark

Verwenden Sie die getRotation -Methode:

Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();

Aus der Dokumentation:

Gibt die Drehung des Bildschirms aus seiner "natürlichen" Ausrichtung zurück. Der zurückgegebene Wert kann Surface.ROTATION_0 (keine Drehung), Surface.ROTATION_90, Surface.ROTATION_180 oder Surface.ROTATION_270 sein. Wenn ein Gerät beispielsweise über einen natürlich hohen Bildschirm verfügt und der Benutzer es seitlich gedreht hat, um in eine Querformatausrichtung zu wechseln, kann der hier zurückgegebene Wert entweder Surface.ROTATION_90 oder Surface.ROTATION_270 sein, abhängig von der Richtung, in die er gedreht wurde. Der Winkel ist die Drehung der auf dem Bildschirm gezeichneten Grafik. Dies ist die entgegengesetzte Richtung der physischen Drehung des Geräts. Wenn das Gerät beispielsweise um 90 Grad gegen den Uhrzeigersinn gedreht wird, wird das Rendern zum Kompensieren um 90 Grad im Uhrzeigersinn gedreht, und daher wird hier der zurückgegebene Wert Surface.ROTATION_90 angezeigt. 

Denken Sie daran, dass getRotation von Android 2.2 eingeführt wurde. Verwenden Sie getOrientation, wenn Ihr Ziel ältere Geräte sind.

64
Cristian

Sie können auch verwenden:

getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE

Es gibt einen schönen Artikel zu diesem Thema, der ein Muss ist: Ein Screen Turn verdient einen anderen

7
FerranB

Sie müssen nur die Höhe und Breite Ihrer Leinwand kennen ... Ihre Oberfläche ... Ihren Monitor ... usw.

vielleicht bekommst du es mit:

if (canvas.getHeight()>canvas.getWidth() ) {
//portrait
}
else
{
//landscape
}
1
ORParga

Sie können eine Erweiterungsfunktion aus dem obigen Code erstellen:

fun AppCompatActivity.getRotation(): Int{
    val display = (baseContext.getSystemService(Context.WINDOW_SERVICE) as WindowManager).defaultDisplay
    val rotation = display.rotation
    when(rotation){
        Surface.ROTATION_90 -> return R.integer.LANDSCAPE
        Surface.ROTATION_270 -> return R.integer.LANDSCAPE
        Surface.ROTATION_180 -> return R.integer.PORTRAIT
        Surface.ROTATION_0 -> return R.integer.PORTRAIT
        else ->
            return R.integer.PORTRAIT
    }
}

Erstellen Sie in Ihrem Ressourcenverzeichnis eine constants.xml-Datei mit folgendem Inhalt:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="LANDSCAPE">0</integer>
    <integer name="PORTRAIT">1</integer>
</resources>

Ihr Code ist dann so einfach wie (z. B. vertikales/horizontales Layout für einen Recyclerview in einem Fragment:

val a  = activity as AppCompatActivity
        val orientation = a.getRotation()
        when (orientation){
            R.integer.PORTRAIT -> rv.layoutManager = LinearLayoutManager(activity, RecyclerView.VERTICAL,false)
            R.integer.LANDSCAPE -> rv.layoutManager = LinearLayoutManager(activity, RecyclerView.HORIZONTAL,false)
        }
1
Jens Buysse

Ich denke, der sicherste und einfachste Weg ist das Hinzufügen eines Tags für ein Element Ihrer Aktivitäten in XML. Setzen Sie beispielsweise das Viewpager-Tag im Hochformat-Layout auf "Hochformat" und setzen Sie es im Querformat auf "Querformat". Dann prüfen Sie in Ihrem oncreate nach diesem Tag:

if(mViewpager.getTag().equals("portrait"))
  // is in portrait
else
  // is in landscape
1
9patchcoder

Dies ist möglicherweise nicht relevant, aber wenn Sie dies zufällig wissen müssen, weil Sie das Gerät in seiner aktuellen Ausrichtung sperren möchten, können Sie zwischen den folgenden beiden Codezeilen wechseln.

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
0
user2288580