¿Cómo puedo obtener la orientación actual de la pantalla?

190

Solo quiero establecer algunas banderas cuando mi orientación es horizontal para que cuando se recrea la actividad en onCreate () pueda alternar entre qué cargar en vertical frente a horizontal. Ya tengo un xml de layout-land que maneja mi diseño.

public void onConfigurationChanged(Configuration _newConfig) {

        if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            this.loadURLData = false;
        }

        if (_newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            this.loadURLData = true;
        }

        super.onConfigurationChanged(_newConfig);
    }

Anular onConfigurationChanged evitará que mi diseño xml de la tierra se cargue en orientación horizontal.

Solo quiero obtener la orientación actual de mi dispositivo en onCreate (). ¿Cómo puedo conseguir esto?

Sheehan Alam
fuente

Respuestas:

475
Activity.getResources().getConfiguration().orientation
EboMike
fuente
8
Esto solo proporciona dos valores ORIENTATION_PORTRAIT y ORIENTATION_LANDSCAPE. ¿Hay alguna manera de obtener los cuatro valores de ActivityInfo? (Eso es LANDSCAPE_REVERSE y PORTRAIT_REVERSE también)
HRJ
18
@HRJ puede usar getWindowManager (). GetDefaultDisplay (). GetRotation ()
MKJParekh
24
getWindowManager (). getDefaultDisplay (). getRotation () devuelve la rotación con referencia a la orientación "natural" de la pantalla, es decir, para una tableta devolvería Surface.ROTATION_0 en modo horizontal, mientras que para un teléfono móvil devolvería el mismo valor para retrato.
Zoltán
65
int orientation = this.getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
    // code for portrait mode
} else {
    // code for landscape mode
}

Cuando la superclase de thisesContext

Daniel
fuente
28

En algunos dispositivos void onConfigurationChanged()puede fallar. El usuario usará este código para obtener la orientación actual de la pantalla.

public int getScreenOrientation()
{
    Display getOrient = getActivity().getWindowManager().getDefaultDisplay();
    int orientation = Configuration.ORIENTATION_UNDEFINED;
    if(getOrient.getWidth()==getOrient.getHeight()){
        orientation = Configuration.ORIENTATION_SQUARE;
    } else{ 
        if(getOrient.getWidth() < getOrient.getHeight()){
            orientation = Configuration.ORIENTATION_PORTRAIT;
        }else { 
             orientation = Configuration.ORIENTATION_LANDSCAPE;
        }
    }
    return orientation;
}

Y use

if (orientation==1)        // 1 for Configuration.ORIENTATION_PORTRAIT
{                          // 2 for Configuration.ORIENTATION_LANDSCAPE
   //your code             // 0 for Configuration.ORIENTATION_SQUARE
}
Sakthimuthiah
fuente
1
Tenga en cuenta que getOrient.getWidth () y getOrient.getHeight () están en desuso ahora.
valerybodak
Debe ser marcado como la respuesta correcta a medida que se forma más detalla
Zapnologica
1
Debe marcarse como respuesta correcta y funciona mejor en todas las condiciones. Pero tenga en cuenta que anivaler dijo que getActivity (). GetWindowManager (). GetDefaultDisplay (). GetWidth () y getHeight () ahora está en desuso. Utilice getSize (Point outsize). Se puede usar como pasar un nuevo objeto de punto y eso obtendrá sus miembros x e y.
Mahendra Chhimwal
como Point outSize = new point (); getOrient.getSize (outSize); if (outSize.x == outSize.y) return SQUARE;
Mahendra Chhimwal
Pensé en señalar que Configuration.ORIENTATION_SQUARE está en desuso y, si bien puede haberse definido como 0 en 2013, se define como 3, mientras que Configuration.ORIENTIATION_UNDEFINED se define como 0. Saludos.
Dave
26
int rotation =  getWindowManager().getDefaultDisplay().getRotation();

esto dará toda la orientación como normal e inversa

y manejarlo como

int angle = 0;
switch (rotation) {
    case Surface.ROTATION_90:
        angle = -90;
        break;
    case Surface.ROTATION_180:
        angle = 180;
        break;
    case Surface.ROTATION_270:
        angle = 90;
        break;
    default:
        angle = 0;
        break;
}
AndroidBeginner
fuente
final int angle = (rotation == Surface.ROTATION_90) ? 90 : (rotation == Surface.ROTATION_180) ? 180 : (rotation == Surface.ROTATION_270) ? 270 : 0;
Andrey Syrokomskiy
12
getActivity().getResources().getConfiguration().orientation

Este comando devuelve el valor int 1 para Vertical y 2 para Horizontal

Rudolf Coutinho
fuente
4

En caso de que a alguien le gustaría obtener una descripción de orientación significativa (como la que se le pasó a onConfigurationChanged(..)ellos reverseLandscape, sensorLandscapeetc.), simplemente usegetRequestedOrientation()

a.ch.
fuente
1

En su clase de actividad utilice el siguiente método:

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        // Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

            setlogo();// Your Method
            Log.d("Daiya", "ORIENTATION_LANDSCAPE");

        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {

            setlogoForLandScape();// Your Method
            Log.d("Daiya", "ORIENTATION_PORTRAIT");
        }
    }

Luego, para declarar que su actividad maneja un cambio de configuración, edite el elemento apropiado en su archivo de manifiesto para incluir el android:configChangesatributo con un valor que represente la configuración que desea manejar. Los valores posibles se enumeran en la documentación del android:configChangesatributo (los valores más utilizados son "orientación" para evitar reinicios cuando cambia la orientación de la pantalla y "keyboardHidden" para evitar reinicios cuando cambia la disponibilidad del teclado). Puede declarar múltiples valores de configuración en el atributo separándolos con una tubería | personaje.

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">

¡¡Eso es todo!!

DalveerSinghDaiya
fuente
0

si desea anular ese método onConfigurationChanged y aún así quiere que haga las cosas básicas, considere usar super.onConfigyrationChanged () como la primera instrucción en el método anulado.

Samarth S
fuente
0

Solo quiero proponer otra alternativa que les interese a algunos de ustedes:

android:configChanges="orientation|keyboardHidden" 

implica que declaramos explícitamente el diseño a inyectar.

En caso de que queramos mantener la inyección automática gracias a las carpetas de diseño-tierra y diseño. Todo lo que tienes que hacer es agregarlo a onCreate:

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        getSupportActionBar().hide();

    } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        getSupportActionBar().show();
    }

Aquí, mostramos o no la barra de acción dependiendo de la orientación del teléfono

Z3nk
fuente