2011-03-21 22 views
23

Quiero que mi vista gire solo en modo horizontal, en sentido horario y antihorario.¿Cómo puedo rotar la pantalla solo en modo horizontal en Android?

He leído sobre el único en sentido antihorario para Android < 2.2 y eso no es un problema, mi aplicación será de +2.2 por ahora.

modifico mi manifiesto para atrapar cambios de configuración

android:configChanges="keyboardHidden|orientation" 

puedo reemplazar mi actividad para captar los cambios de configuración

@Override 
public void onConfigurationChanged(Configuration newConfig) { 

y sé cómo atrapar la orientación

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); 
int rot = display.getRotation(); 

pero. .. No sé cómo desencadenar la orientación del paisaje adecuada, estoy haciendo esto:

if (rot == Surface.ROTATION_90 || rot == Surface.ROTATION_270){ 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
} 

pero siempre giran a counterclocwise :-(

¿Cómo puedo configurar a la izquierda y la derecha orientación horizontal?

EDITAR

Si fijo orientación en el manifiesto:

androide: screenOrientation = "paisaje" diseño

del actividad permanece siempre en el "paisaje izquierda", y yo quiere cambiar entre el paisaje izquierdo y derecho: S

+0

I tengo el mismo problema con mi aplicación Estoy usando API8 y no puedo encontrar la manera de habilitar solo el modo horizontal (tanto CW como CCW) – SERPRO

Respuesta

1

Ha intentado agregar th es a su manifiesto dentro de la etiqueta de actividad para ver si se maneja de forma automática?

android:screenOrientation = "landscape" 
+0

Cuando lo hago, la actividad comienza en modo horizontal, pero siempre el paisaje izquierdo con trackball a la derecha. – rubdottocom

+0

¿Se trata de uno o varios dispositivos, y cuál? – blindstuff

+0

Nexus One 2.3.3, el proyecto está configurado como API 8 – rubdottocom

0

AndroidManifest.xml -> Aplicación -> ha seleccionado su actividad -> Pantalla orientación = paisaje.

55

Si usted está construyendo su aplicación para Android 2.3 y versiones posteriores se debe establecer el atributo se manifiestan como

androide: screenOrientation = "sensorLandscape"

y su aplicación va a girar a (izquierda o derecha) posición horizontal.

Si usted está construyendo su aplicación para Android 2.2 o mayores, pero quieren ejecutarlo en Android 2.3 y versiones posteriores como una configuración "sensorLandscape", podría intentar algo como esto

public static final int ANDROID_BUILD_GINGERBREAD = 9; 
public static final int SCREEN_ORIENTATION_SENSOR_LANDSCAPE = 6; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (Build.VERSION.SDK_INT >= ANDROID_BUILD_GINGERBREAD) { 
     setRequestedOrientation(SCREEN_ORIENTATION_SENSOR_LANDSCAPE); 
    } 
... 

Este fue el mejor Manera de manejar los cambios de orientación del paisaje en mi caso. No pude encontrar una forma mejor de girar la pantalla a orientaciones de paisaje izquierda o derecha para Android 2.2 y anteriores. Intenté leer las orientaciones del sensor y establecer la posición del paisaje en función de eso, pero me parece que tan pronto como llame a "setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); "el sensor se apaga (para su aplicación/actividad) y no puede leer la orientación a través del sensor.

BTW en realidad no necesita anular el" onConfigurationChanged (Configuración newConfig) "para que esto funcione correctamente .

+1

No es necesario definir sus propias variables int de paleta de pan de jengibre y paisaje, use Build.VERSION_CODES.GINGERBREAD y ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE – OpenUserX03

+3

Debe definir sus propias variables porque Build. VERSION_CODES.GINGERBREAD y ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE no están (todavía) definidos en Android 2.2 y plataformas anteriores (porque obviamente no existían en aquel entonces). Esta solución funciona para Android 2.2 y sistemas operativos Android anteriores. – croc

+0

Las bibliotecas anteriores de Android no son compatibles con Build.VERSION.SDK_INT, así que uso Integer.parseInt (android.os.Build.VERSION.SDK). También el android: screenOrientation = "landscape" tiene que dejarse en el manifiesto (no mencionado en la respuesta aquí). – Jonathan

6

En su declaración de actividad de manifiesto, en lugar de

android:screenOrientation = "landscape" 

uso

android:screenOrientation = "sensorLandscape"

Cuestiones relacionadas