Bloquear orientación de pantalla




Supongamos que tenemos la siguiente pantalla





















Pero cuando la rotamos nos pasa lo siguiente













Hay dos soluciones
  1. Seguir el tutorial Rotar pantalla para re-organizar los elementos
  2. Bloquear la pantalla para que no rote, donde la explicación es la siguiente

Este bloqueo de pantalla lo podemos hacer desde el XML o desde JAVA.
Utilicen ustedes la que le sea más cómodo

Desde el XML
AndroidManifest.xml
agregamos
android:screenOrientation=["landscape" | "portrait" ]

Landscape : orientación horizontal
Portrait: orientación vertical

Por ejemplo esto quedaría así en el AndroidManifest.xml
  <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.miapp.miusuario.MainActivity"
            android:screenOrientation="portrait"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
   </application>

http://developer.android.com/intl/es/guide/topics/manifest/activity-element.html

Desde JAVA
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);    
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Por ejemplo así quedaría nuestro archivo de Java
public class MainActivity extends ActionBarActivity {

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        //CÓDIGO //CÓDIGO
        }
}
En este ejemplo utilicé el MainActivity, pero podes ponérselo a todas las clases por igual

Nota: Si utilizas tu emulador de Android, con el boton "9" de tu teclado número podes rotar la pantalla.

26 comentarios:

  1. Saludos. Una duda como se ofusca el codigo al crear apk con android studio, tengo entendido que se hace con PROGUARD, pero no se los pasos a seguir. gracias si pudieras responder

    ResponderEliminar
  2. saludos tengo una duda muy grande resulta que cree una app "calculadora " en un nexus de 4,7 pulgadas se ve perfecta en el mismo y en un sony z3 y z2 pero lo probe en un x8 x10 lgp350 y se pierden los botones o bien la mitad mi duda es ¿como le hago para que mi aplicacion se ajuste a multiples pantallas? espero tu ayuda te lo agradeceria mucho

    ResponderEliminar
    Respuestas
    1. mira este tuto
      http://cursoandroidstudio.blogspot.com.ar/2015/01/tablets.html

      Eliminar
  3. Esta buena el código. Gracias

    ResponderEliminar
  4. Excelente aporte amigo.... me sirvio muchisimo

    ResponderEliminar
  5. Gracias viejo, lo necesitaba
    una pregunta ¿como puedo declara de forma global? osea para no repetir el codigo en todas las actividades o clases java.

    ResponderEliminar
    Respuestas
    1. desde el AndroidManifest.xml, tenes que probar por ahí

      Eliminar
    2. Gracias todo este contenido es unico y claro sirve mucho

      Eliminar
  6. Muy bueno amigo, ahora tengo una duda. Ya que cree una pequeña aplicación que ejecuto en modo horizontal, pero al querer rotarlo al otro lado horizontal la pantalla no se gira. ¿Como podría solucionar eso?
    De antemano gracias.

    ResponderEliminar
  7. tus tutoriales son muí buenos; mira tengo una pregunta tienes algún tutorial que me enseñe que codigo utilizar para que no se detenga la aplicacion cuando se bloquea la pantalla del móvil ...... pues cree un reproductor de musica pero cada que se bloquea la pantalla se detiene ... gracias

    ResponderEliminar
  8. Hola alguien me puede ayudar pasa que tengo una aplicacion que necesito que en los tablets se active la posicion horizontal y vertical y en los celulares que se active una sola orientacion ya sea orizontal o vertical...alguna idea de como redolver esto..

    ResponderEliminar
  9. por favor tengo una consulta si primero quisiera setear a landscape y luego bloquear para que se ejecute así, es posible?

    ResponderEliminar
  10. gracias amigooo, me funciono por medio de java...

    ResponderEliminar
  11. hola me gustaría saber como puedo hacer para poder bloquear la pantalla y volver a desbloquearla, gracias

    ResponderEliminar
  12. ¡Tus artículos son geniales! Bastante informativos y explicas todo con detalle.
    Mientras más mejoras veo en Android menos ganas tengo de usar otro sistema operativo o smartphone.

    ResponderEliminar
  13. buenas tardes, se puede entrar en una condición la orientación? osea dentro del if que evalué, si esta en vertical, me muestre unas cosas y si esta en horizontal poner otras cosas pero mas amplias

    ResponderEliminar
    Respuestas
    1. Tenés que crear una carpeta que se llame layout-land dentro del directorio res y ahí creá un layout con el mismo nombre que el layout que querés versionar en landscape y mostrás los elementos que querés. Para crear la carpeta tenés que mostrar la vista de proyecto, no la vista Android.

      Eliminar
  14. Portrait ya no corre en 3.6... Actualicen la info

    ResponderEliminar