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!
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
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.
Tuve el mismo problema en NexusOne SDK 2.3.
Esto lo resolvió: comprobar la orientación en el teléfono Android .
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();