Soru Bir parçada dönüşe / manzaraya izin ver


Uygulamamın dört parçalı bir FragmentPagerAdapter ile tek bir Etkinliği var (ViewPagerIndicator kütüphanesini kullanarak). Bu parçalardan biri, ayrı bir portre ve manzara düzeni için tasarımlara sahip, diğer üçü ise dikey yönde sabitlenmeli ve düzeltilmeli.

Düşüncem belirlenmekti android:configChanges="orientation" tezahür ve çağrı getActivity().setRequestedScreenOrientation() içinde onResume() tüm parçaların kilitlenmesi SCREEN_ORIENTATION_PORTRAIT üçte ama SCREEN_ORIENTATION_UNSPECIFIED rotasyona izin vermesi gereken, ancak bu işe yaramıyor. Uygulama portre modunda kalır.

bunu arşivlemenin bir yolu var mı?

Gerçek aktivitenin, bir parçanın faaliyetini yerine getirmeden yönelimi değiştirmesine izin vermek için zaten varsa, dönmesi gerekli değildir, ancak bunun mümkün olduğuna dair hiçbir şey bulamadım. Ayrıca, yatay yönde olduğunda sekme çubuğunun gizleneceğinden, etkinlik döndüğünde de eşit derecede iyi olur.


22
2017-11-06 13:19


Menşei




Cevaplar:


Geçersiz Kıl setUserVisibleHint() her parçada.

Portre sadece parçalarda:

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

portre / manzara parçasında:

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

Bu, tüm aktivitenin bir parça halinde dönmesine izin verecek, ancak diğerlerinde portreye sabitleyecektir.


32
2017-11-06 14:11



Ben geçersiz setMenuVisibility geçersiz kılma setUserVisible her ikisi de aynı anda ayarlanır, bu yüzden her ikisi de aynı davranmalıdır, sadece daha iyi kullanarak okur UserVisible - Chris.Jenkins


Benim için çalışan bir şey sadece koymaktı

getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);

Üstünde OnCreateView() fragmanların her biri için yöntemler. Sen değiştirmek istersin ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR uygun olan SCREEN_ORIENTATION sabiti.

Bunu yaptıktan sonra ICS üzerinde mükemmel çalıştı. Etkinlik, belirli etkinlik için bildirimi ayarlamanız gerekmez.


8
2017-12-22 03:07





Sorun, etkinleştirirseniz configChanges o zaman işlemek gerekir onConfigurationChanged() Aktivitenizde / parçalarınızda.

Eğer ateş edersen getActivity().setRequestedScreenOrientation() manuel olarak aramak zorunda kalacaksınız setContentView() tekrar peyzaj düzenini yeniden doldurmak için.

Ayrıca "BELİRSİZLİK" ayarı manzaraya değişmeyecek, sadece bulunduğu yerde kalacaktır.

Kullanmak istiyorum getActivity().setRequestedScreenOrientation(SCREEN_ORIENTATION_PORTRAIT) portre parçaları için. Ve getActivity().setRequestedScreenOrientation(SCREEN_ORIENTATION_LANDSCAPE) Peyzaj parçaları için.

Bu, etkinlik düzenini yeniden doldurur. Bu, daha sonra, düzenlediğiniz gösterime girmeden önce söz konusu parçaya varsayılan olarak yeniden oluşturulduktan sonra yeniden oluşturulduğunu gösterdiğinizden emin olmak için, en son ViewPager sayfasını takip etmeniz gerekir anlamına gelir. kullanıcı ve parça onResume() denir.

Fiddly olacak, ama bu mümkün.


2
2017-11-06 13:33



configChanges'in kötüye kullanımı konusunda beni düzeltdiğiniz için teşekkürler ve SCREEN_ORIENTATION_UNSPECIFIED - Garcon


Sadece onCreate / onCreateView'e eklemek istediğiniz parçanın içinde . GetActivity () setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); diğer parçalarda çoklu yönlendirmeye izin vermek istiyorsanız . GetActivity () setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);


0
2018-06-03 10:50





Write some code in "AndroidManifest.xml" on the particular activity tag.
 android:configChanges="orientation|screenSize".

And Write code in Fragment on "onCreateView" method,    
for Portrait:
 getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
 setRetainInstance(true);

for Lansscape:
  getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
  setRetainInstance(true);

0
2018-02-06 10:43