2012-10-03 24 views
28

Mi aplicación tiene que estar en el modo vertical, así que lo puse en el manifiesto por:Ajuste de la dirección por sólo 1 fragmento de mi actividad, mientras que el resto se encuentra en el retrato

android:screenOrientation="portrait" 

Pero sólo recientemente agregado otro fragmento (FragA) que solo se ve y funciona 10 veces mejor en el paisaje. ¿Hay algo que pueda poner dentro de mi FragA para simplemente hacer ese fragmento en el paisaje mientras conserva el resto de la aplicación en retrato o al hacer esto tendré que agregar algo a mis otros fragmentos para mantenerlos retenidos como retrato?

Respuesta

11

El atributo de orientación es por actividad, por lo que puede declarar la orientación solo de la actividad que contiene el fragmento para que esté en el paisaje y el resto de las actividades permanezcan como están.

+0

así que básicamente mi mejor apuesta sería la de simplemente crear otra actividad y luego en mi sólo hay que poner de manifiesto que a medida: android: screenOrientation = "paisaje"? –

+0

Sí, eso garantizará que su funcionalidad nunca fallará. –

+0

@DineshVenkata pero no quiero rotar solo fragmento no actividad qué hacer – PriyankaChauhan

74

Utilice la siguiente línea de código en el fragmento donde desea una orientación específica (en este caso retrato).

getActivity().setRequestedOrientation(
      ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Si usted quiere tener una orientación en un fragmento, que se basa en la forma en que el usuario mantiene su dispositivo, a continuación, utilizar la siguiente línea de código.

getActivity().setRequestedOrientation(
       ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 

Espero, esto le dará la solución prevista.

+0

Lo uso en el código de actividad justo antes de que se comprometa la transacción de fragmento. Usarlo dentro del fragmento onAttach()/onStop() no funciona bien. Lo pruebo en KitKat atm. – WindRider

+2

Corrección: Parece que el mejor lugar para llamar a setRequestedOrientation() está dentro de OnBackStackChangedListener después de verificar qué fragmento está actualmente activo. Y este enfoque conduce a una mejor transición visual cuando se reinicia la actividad. – WindRider

+0

Lo tengo trabajando usando esas líneas en el fragmento onCreateView() –

11

En cada uno de sus fragmentos, establezca la orientación solicitada.

doc Referencia: http://developer.android.com/reference/android/content/pm/ActivityInfo.html

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Fragment locked in portrait screen orientation 
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  

    // Fragment locked in landscape screen orientation 
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

    // Fragment screen orientation normal both portait and landscape  
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
} 
Cuestiones relacionadas