vertical studio rotación rotacion reinicie que pantalla orientación orientacion movil manejando horizontal girar fijar evitar detectar como cambio cambiar activity android orientation

studio - orientación de la pantalla de Android



orientación horizontal android studio (8)

Creo que necesitas crear dos diseños diferentes e inflar diseños diferentes en diferentes orientaciones. Te estoy dando un código de muestra que está funcionando 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 otra manera, 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); }

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



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

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 quienquiera que se encuentre.


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 int
Desde: API Nivel 1

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



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 está orientado a Android 2.2 (nivel API 8) o superior. Algunas personas e incluso los de Google a veces parecen olvidar eso.

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

  • 0 (por defecto, retrato),
  • 1 (dispositivo 90 grados hacia la izquierda),
  • 3 (dispositivo 90 grados hacia la derecha)

No informa cuando lo coloca "sobre su cabeza" (gire 180, ese sería el valor 2). Este resultado es posiblemente específico del dispositivo.

En primer lugar, debe dejar claro si utiliza un emulador o un dispositivo. ¿Sabes cómo rotar el emulador? Entonces 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()); }

Verifique si la pantalla de su dispositivo se ha bloqueado en la configuración del dispositivo Configuración> Pantalla> Rotar automáticamente la pantalla . Si esa casilla de verificación no está marcada, Android no informará los cambios de orientación a su Actividad. Para ser claros: no reiniciará la actividad. En mi caso solo obtengo 0 , como usted describió.

Puede verificar 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);

Devolverá 0 si Auto-Rotate está desactivado y 1 si Auto-Rotate está activado. Otro intento. En tu programa original podrías haber puesto en manifiesto

android:screenOrientation="portrait"

Mismo efecto, pero esta vez solo para tu actividad. Si hicieras el pequeño programa de prueba, esta posibilidad habría sido eliminada (por eso lo recomiendo).

Observación: Sí, todo el tema de orientación / rotación es un tema "interesante" de hecho. Prueba cosas, usa Log.d (), experimenta, aprende.


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


/* 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();