Orientación de la pantalla de Android

He intentado getOrientation() para obtener el valor de orientación, pero siempre devuelve 0!

GetOrientation () está obsoleto pero esto no es neccesarily la raíz de su problema. Es cierto que deberías usar getRotation () en lugar de getOrientation () pero solo puedes usarlo si apuntas a Android 2.2 (API Level 8) o superior. Algunas personas e incluso los Googlers a veces parecen olvidar eso.

Como un ejemplo, en mi deseo de HTC con Android 2.2. GetOrientation () y getRotation () ambos reportan los mismos valores:

  • 0 (predeterminado, retrato),
  • 1 (dispositivo de 90 grados en sentido antihorario),
  • 3 (dispositivo de 90 grados en sentido horario)

No informa cuando usted lo pone "en su cabeza" (gire 180, que sería el valor 2). Este resultado es posiblemente específico del dispositivo.

En primer lugar debe aclarar si utiliza un emulador o un dispositivo. ¿Sabes cómo girar el emulador? Entonces yo recomendaría crear un pequeño programa de prueba con un método onCreate () como este:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); Display mDisplay = mWindowManager.getDefaultDisplay(); Log.d("ORIENTATION_TEST", "getOrientation(): " + mDisplay.getOrientation()); } 

Compruebe si la pantalla de su dispositivo se ha bloqueado en la configuración del dispositivo Configuración> Pantalla> Pantalla de rotación automática . Si esa casilla de verificación está desmarcada, Android no informará cambios de orientación a su Actividad. Para ser claro: no se reiniciará la actividad. En mi caso recibo solamente 0 , como usted describió.

Puede comprobar esto desde su programa si agrega estas líneas a onCreate ()

 int sysAutoRotate = 0; try { sysAutoRotate = Settings.System.getInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION); } catch (SettingNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.d("ORIENTATION_TEST", "Auto-rotate Screen from Device Settings:" + sysAutoRotate); 

Retornará 0 si Auto-Rotate está desactivado y 1 si Auto-Rotate está activado. Otro intento. En su programa original podría haber establecido en manifiesto

 android:screenOrientation="portrait" 

El mismo efecto, pero esta vez solo para su actividad. Si usted hizo el pequeño programa de prueba esta posibilidad habría sido eliminado (es por eso que lo recomiendo).

Observación: Sí, todo el tema de orientación / rotación es un tema "interesante". Pruebe las cosas, utilice Log.d (), experimente, aprenda.

Si desea saber si el contenido mostrado actualmente está en modo horizontal o vertical (posiblemente completamente independiente de la rotación física del teléfono), puede utilizar:

getResources().getConfiguration().orientation

Documentación del desarrollador

Orientación pública
Desde: API Nivel 1

Orientación general de la pantalla. Puede ser uno de ORIENTATION_LANDSCAPE, ORIENTATION_PORTRAIT u ORIENTATION_SQUARE.

getOrientation() está obsoleto. En su lugar, intente getRotation() .

Para evitar el uso de métodos Deprecated, utilice la clase Configuración de Android que se encuentra aquí . Funciona desde API lvl 1 y aún funciona en los dispositivos Android más recientes. (No obsoleto).

Como ejemplo, considere el fragmento de código siguiente:

 Configuration config = getResources().getConfiguration(); if (config.orientation == Configuration.ORIENTATION_PORTRAIT) { setContentView(R.layout.portraitStart); } else { setContentView(R.layout.landscapeStart); } 

Lo mejor de la suerte, espero que esta respuesta ayude a quien se encuentre con ella.

Deberías usar:

 getResources().getConfiguration().orientation 

Puede ser uno de ORIENTATION_LANDSCAPE , ORIENTATION_PORTRAIT .

http://developer.android.com/reference/android/content/res/Configuration.html#orientation

 /* First, get the Display from the WindowManager */ Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); /* Now we can retrieve all display-related infos */ int width = display.getWidth(); int height = display.getHeight(); int orientation = display.getOrientation(); 

Creo que usted necesita para crear dos diseños diferentes e inflar diferentes diseños en la orientación diferente. Le estoy dando un código de la muestra que está trabajando muy bien para mí. "Contexto" puede pasar de su actividad en caso de adaptador personalizado. Si está utilizando un adaptador personalizado, puede probar este código:

 @Override public View getView(final int position, View convertView, ViewGroup parent) { View rowView = convertView; ViewHolder holder = null; int i = context.getResources().getConfiguration().orientation; if (rowView == null) { LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (i == Configuration.ORIENTATION_PORTRAIT) { rowView = inflater.inflate(R.layout.protrait_layout, null, false); } else { rowView = inflater.inflate(R.layout.landscape_layout, null, false); } holder = new ViewHolder(); holder.button = (Button) rowView.findViewById(R.id.button1); rowView.setTag(holder); } else { holder = (ViewHolder) rowView.getTag(); } return rowView; } 

De otro modo usted puede establecer directamente dos diseños diferentes en su código

  int i = context.getResources().getConfiguration().orientation; if (i == Configuration.ORIENTATION_PORTRAIT) { ArrayAdapter<String> adt = new ArrayAdapter<String>(getApplicationContext(), R.layout.protrait_layout, name); } else { ArrayAdapter<String> adt = new ArrayAdapter<String>(getApplicationContext(), R.layout.landscape_layout, name); } 

Tuve el mismo problema en NexusOne SDK 2.3.

Esto lo resolvió: Verifique la orientación en el teléfono Android .

  • ¿Cómo reemplazar adecuadamente Sensor.TYPE_ORIENTATION (que ahora está obsoleto)?
  • GetActivity () en el fragmento es nulo después del cambio de orientación
  • ¿Qué significa este Android Lint: "Orientación errónea?"
  • Cómo obtener orientación del dispositivo Android
  • Establecer la orientación para sólo 1 fragmento en mi actividad, mientras que el resto está en el retrato
  • El enfoque de EditText es inconsistente en todos los diseños
  • Android - Cómo acercarse al algoritmo de detección de caídas
  • Orientación de vídeo de retrato de Android incorrecta en VideoView
  • DialogFragment Orientación Cambiar el bloqueo con getActivity ()
  • Android: Problemas al calcular la orientación del dispositivo
  • Android: diseño alternativo xml para el modo horizontal
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.