2012-05-21 26 views
7

göz önüne alındığında, bir boş alan bırakır:Android göstermek/gizlemek fragmanı

  1. ilk anda seçili fragmanı (ViewFlipper) içerisinde
  2. Eylem kısa mesaj uygulamanız arasında geçiş ekranda iki dikey olarak yerleştirilmiş elemanlar (ViewPager ve Fragman) üst kısımda temel ve WebView tabanlı görünüm ve alt parçayı gizler/gösterir. Gözlenen

:

  1. alt fragmanını gizlenmesi dip parçası bulunan bir boşluk bırakır.

Denedim hem Bağıl ve LinearLayout ama (üst weight=1 ayarlı fragmanı ile) hem alt parçası hala boş alana sahip kaldırıldıktan sonra hiçbir etkisi yoktur dip

Burada üst düzey düzeni dosyasıdır:

İşte
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" android:layout_weight="1"/> 

<!-- This gets replaced with appropriate fragment at run time --> 
<LinearLayout 
    android:id="@+id/scrollFragmentPlaceholder" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="110dip" /> 
</LinearLayout> 

fragmanının değiştirir kod

Fragment scroll = getSupportFragmentManager().findFragmentById(R.id.scrollFragment); 
    if (scroll.isHidden() == isWebView) 
     return; // already handled, do nothing 
    FragmentTransaction tr = getSupportFragmentManager().beginTransaction(); 
    if (scroll != null && scroll.isAdded()) { 
     if (isWebView) { 
      tr.hide(scroll); 
     } else 
      tr.show(scroll); 
    } 
    tr.commit(); 

Ve burada Nasıl göründüğü: Bottom fragment is hidden

+0

sen kalır görünümünde * .measure() yapıyor denediniz ? – Codeman

+0

Gerçekten değil, ancak siparişi tersine çevirir ve metin sürümünü/gizle altını gösterirse, doğru şekilde gösteriliyor – Bostone

+0

Android için WebView kanlı gariptir. Bazı ekran görüntülerini ekleyebilir misiniz, böylece daha özel olarak ne hakkında konuştuğunuzu görebiliyorum? Ayrıca, kullanılabilir alanın yarısını almasını istiyorsanız, iki görünümde layoutWeight = 1 değerine sahip olmanız gerekir. Ebeveyn görünümünde de orientation = "vertical" değerini belirttiğinizden emin olmanız gerekir. – Codeman

cevap

16

Bir ay sonra nasıl yapılacağını anladım. Sadece parçanın gizlenmesinin yeterli olmadığı ortaya çıkar, temel olarak parçayı içeren kabuğun gizlenmesi/gösterilmesi gerekir. Bu, orijinal olarak XML'de tanımlanmış olan LinearLayout'tur. Aslında, parçayı göstermek/gizlemek için o orijinal düzende görünürlük ayarlamak yeterlidir. Yani sorudan kod artık şöyle görünür: Hala/göstermek istiyorum

public void onJobViewToggled(final boolean isWebView) { 
    if (isFinishing()) 
     return; 
    final Fragment scroll = getSupportFragmentManager().findFragmentById(R.id.scrollFragment); 
    if (scroll.isHidden() == isWebView) 
     return; // already handled, do nothing 
    final FragmentTransaction tr = getSupportFragmentManager().beginTransaction(); 
    if (scroll != null && scroll.isAdded()) { 
     if (isWebView) { 
      tr.hide(scroll); 
      // shell is the original placeholder 
      shell.setVisibility(View.GONE); 
     } else { 
      tr.show(scroll); 
      shell.setVisibility(View.VISIBLE); 
     } 
    } 
    tr.commit(); 
} 

Not çalışması için fragman gizlemek

+1

Kabuk nasıl oluyor? – Nick

İlgili konular