¿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?

Respuestas:


475
Activity.getResources().getConfiguration().orientation

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


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
}

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;
}

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



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!!


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.


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.