Permitir rotación / paisaje en un fragmento

Mi aplicación tiene una sola actividad con un FragmentPagerAdapter con cuatro fragmentos (utilizando la biblioteca ViewPagerIndicator). Uno de estos fragmentos tiene diseños tanto para un retrato separado como para un diseño de paisaje, los otros tres no lo necesitan y deben fijarse a la orientación vertical.

Mi pensamiento fue establecer android:configChanges="orientation" en el manifiesto y llamar a getActivity().setRequestedScreenOrientation() en el onResume() de todos los fragmentos, bloqueando a SCREEN_ORIENTATION_PORTRAIT en tres de ellos, pero a SCREEN_ORIENTATION_UNSPECIFIED en el que necesita Permitir la rotación, pero esto no funciona. La aplicación permanece en modo retrato.

¿Hay una manera de lograr esto?

En realidad, no es necesario que la actividad real gire si de cualquier manera se permite que un fragmento cambie de orientación sin que su actividad lo haga, pero no he encontrado nada que mencione que esto sea posible. También sería igualmente correcto si la actividad gira ya que la barra de pestañas se oculta cuando está en orientación horizontal.

setUserVisibleHint() en cada fragmento.

En el retrato sólo fragmentos:

 @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(isVisibleToUser) { Activity a = getActivity(); if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } } 

En el fragmento retrato / paisaje:

 @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(isVisibleToUser) { Activity a = getActivity(); if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR); } } 

Esto permitirá que toda la actividad gire en un fragmento, pero lo arreglará para que se retrase en otros.

Una cosa que funcionó para mí era simplemente poner

 getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR); 

En la parte superior de los métodos OnCreateView() para cada uno de los fragmentos. Desea reemplazar ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR con la constante SCREEN_ORIENTATION apropiada.

Una vez que lo hice funcionó perfectamente en ICS. No tiene que ajustar el manifiesto para la actividad específica.

El problema es que si habilitas configChanges debes manejar el método onConfigurationChanged() en tu actividad / fragmentos.

Lo que significa que si se disparó el getActivity().setRequestedScreenOrientation() tendría que llamar manualmente a setContentView() nuevo para reinflar el diseño de paisaje.

También el ajuste `UNSPECIFIED 'no cambiará a paisaje, sólo permanecerá donde está.

Yo usaría getActivity().setRequestedScreenOrientation(SCREEN_ORIENTATION_PORTRAIT) para los fragmentos de retrato. Y getActivity().setRequestedScreenOrientation(SCREEN_ORIENTATION_LANDSCAPE) para los fragmentos de paisaje.

Esto reinflará el diseño de la actividad, lo que significa que tendrá que realizar un seguimiento de la última página de ViewPager en la que se encuentre, para asegurarse de mostrar que después de que el diseño se haya recreado como predeterminado volver a ese fragmento antes de que se muestren a la Usuario y fragmento onResume() .

Va a ser complicado pero, es posible.

En el fragmento que desea establecer, simplemente añada a su onCreate / onCreateView getActivity (). SetRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); En los otros fragmentos que desea permitir la orientación múltiple, agregue getActivity (). SetRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);

  • Indicar después de pasar la última página en ViewPager
  • Establecer currentItem de un viewPager de un fragmento
  • GetSupportFragmentManager no compila en DialogFragment
  • ¿Cómo se crea un Android View Pager con un indicador de puntos?
  • CardView layout_margin no funciona
  • Imageview y PagerAdapter
  • Android ViewPager Con animación diferente como acercar, atenuarse, etc
  • Android añadió el indicador de círculo a viewpager
  • Actualizar SlidingTabLayout
  • ¿Cómo hacer el FAB evitar ser movido en ViewPager, sin embargo, ser una parte del fragmento dentro?
  • Fijar las pestañas con android.support.v4.view.PagerTabStrip o ViewPagerIndicator
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.