orientación de pantalla de Android

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

getOrientation () está en desuso, pero esta no es necesariamente la raíz de su problema. Es cierto que debe usar getRotation () en lugar de getOrientation (), pero solo puede usarlo si tiene como objective Android 2.2 (nivel de API 8) o superior. Algunas personas e incluso los Googlers a veces parecen olvidar eso.

Como ejemplo, en mi HTC deseo ejecutar Android 2.2. getOrientation () y getRotation () informan los mismos valores:

  • 0 (predeterminado, retrato),
  • 1 (dispositivo 90 grados en sentido antihorario),
  • 3 (dispositivo de 90 grados en el sentido de las agujas del reloj)

No informa cuando lo pones “de cabeza” (rota 180, ese sería el valor 2). Este resultado es posiblemente específico del dispositivo.

Antes que nada, debes aclarar si usas un emulador o un dispositivo. ¿Sabes cómo rotar el emulador? Entonces recomendaría crear un pequeño progtwig 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 checkbox está desactivada, Android no informará los cambios de orientación en su actividad. Para ser claro: no reiniciará la actividad. En mi caso, obtengo solo 0 , como describes.

Puede verificar esto desde su progtwig 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); 

Volverá a 0 si Auto-Rotate está desactivado y 1 si Auto-Rotate está activado. Otro bash. En su progtwig original, puede haber establecido en manifiesto

 android:screenOrientation="portrait" 

Mismo efecto, pero esta vez solo para su actividad. Si realizó el pequeño progtwig de prueba, esta posibilidad se eliminaría (por eso lo recomiendo).

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

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

getResources().getConfiguration().orientation

Documentación del desarrollador

orientación pública interna
Desde: Nivel de API 1

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

getOrientation() está en desuso. En cambio, prueba getRotation() .

Para evitar el uso de métodos obsoletos, use la clase de configuración de Android que se encuentra aquí . Funciona desde API lvl 1 y aún funciona en los últimos dispositivos Android. (No desaprobado).

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

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

La mejor de las suertes: espero que esta respuesta ayude a quien la encuentre.

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 debes crear dos diseños diferentes e inflar diferentes diseños con diferente orientación. Le estoy dando un código de muestra que funciona bien para mí. “contexto” que puede pasar de su actividad en el caso de un 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, puede establecer directamente dos diseños diferentes en su código

  int i = context.getResources().getConfiguration().orientation; if (i == Configuration.ORIENTATION_PORTRAIT) { ArrayAdapter adt = new ArrayAdapter(getApplicationContext(), R.layout.protrait_layout, name); } else { ArrayAdapter adt = new ArrayAdapter(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 .