2013-03-17 18 views
19

Bir ViewPager ve sekmeler içeren bir ActionBar var. Bu sekmelerden birinde bir ListView var ve bu ListView'daki seçeneklerden birine dokunduğumda, o satırın ayrıntı görünümü olan bir çocuk Parçacığı ekliyorum.Görünüm ScrollView yapılandırılmamış olarak üst eşleştirme değil

detay görünümü içindeki bir LinearLayout ile scrollview olduğu bu. ScrollView, match_parent/match_parent ve içindeki LinearLayout, width=match_parent ve height=wrap_content. Telefon boyutunda bir emülatörde, ayrıntı görünümü ekranı istediğiniz gibi doldurur, ancak bir tablette, ayrıntı görünümü yalnızca ScrollView ve LinearLayout'un genişliği geniş olsa bile ekranın genişliğinin bir kısmını kapsar. her ikisi de match_parent.

<style name="ScrollViewContent"> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:paddingLeft">15dp</item> 
    <item name="android:paddingRight">15dp</item> 
    <item name="android:orientation">vertical</item> 
    <item name="android:background">@drawable/image_legal_paper_tile</item> 
</style> 

içerik görünümü bu tekrarlanan bir arka plan image_legal_paper_tile olduğunu etti: İşte

<style name="RootScrollView"> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">match_parent</item> 
</style> 

içerik LinearLayout için tarzıdır: Burada
<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rootView" style="@style/RootScrollView"> 

    <LinearLayout android:id="@+id/scrollContentView" style="@style/ScrollViewContent"> 
     ... 
    </LinearLayout> 
</ScrollView> 

kaydırma görünümü için tarzıdır :

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/legal_paper_tile" 
    android:gravity="fill_horizontal" 
    android:tileMode="repeat" /> 

Yani, görüntü yatay olarak germeli ve arka planda sarı bir yasal kağıt pedi oluşturan yineleyin.

Bu liste ve detay görünümü telefon emülatörü böyle görünüyor

:

enter image description here

Bu ne gerçek bir tablet üzerinde gibi liste ve detay görünümü bakış. Sarı yasal ped parçasının ekranın tüm genişliğini doldurması GEREKİR, ama değil.

enter image description here

DÜZENLEME:

İşte

arka plan yasal kağıt resimdir:

enter image description here

Geniş 320px bu. Telefon emülatörü 480 piksel genişliğinde ve görüntü ekranın genişliğini doldurmak için doğru şekilde uzanıyor. Daha sonra düşey olarak amaçlanan tekrarlar. Ancak, ekranın genişliğini tablete sığdırmak değil. Bu içeriğe göre boyut değişiklikleri nedeniyle

tablet gösterilen genişlik, resmin doğal boyutu değil. Parça ilk yüklendiğinde, bir genişliktir. Ardından alanları doldurup içerik görünümünün altına bir miktar metin ekleyen hesaplamayı yapıyorum. Bu metin mevcut içerikten daha geniştir ve metin ayarlandığında, parçanın genişliği daha geniş içeriği desteklemek için artar.

yüzden, kısacası, bir tablet genişlik resmin doğal boyutu değildir. Görüntü uzuyor, sadece tamamen gerilmiyor.

+0

Tüm düzen boyutları için yalnızca bir düzen kullanıyor musunuz? Arka plan resminiz ne kadar büyük? Tablette görülen arka plan görüntüsü boyutu mu? Sonra bir çini tekrar sorunu olabilir (bunun için belki bu [link] 'i kontrol edin (http://stackoverflow.com/questions/4077487/background-image-not-repeating-in-android-layout). – abbath

+0

Tablette gösterilen genişlik, görüntünün doğal boyutu DEĞİLDİR, çünkü içeriğe bağlı olarak boyutu değiştirir. Parça ilk yüklendiğinde, bir genişliktir. Ardından alanları doldurup içerik görünümünün altına bir miktar metin ekleyen hesaplamayı yapıyorum. Bu metin mevcut içerikten daha geniştir ve metin ayarlandığında, parçanın genişliği daha geniş içeriği desteklemek için artar. –

+0

Eğer kaydırma marjini, scroll'un çocuğunun doğrusal düzeninde kullanırsanız, doğru çalışabilmesi için onu dolguya değiştirmelisiniz. –

cevap

68

, kaydırma ve scrollview android:height="wrap_content" çoçuk için izin verir hala boşluk doldurur ve. Farklı özelliklere sahip birçok çocuğun olması için ana çocuğu konteynır olarak hazırlayın. onu wrap_content ve çocuğunu match_parent olarak ayarla.

örnek:

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true"> 

    <LinearLayout 
     android:id="@+id/dynamic_frame" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <LinearLayout 
      android:id="@+id/dimrix_sub_child" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      android:visibility="gone" > 
     </LinearLayout> 

     <LinearLayout 
      android:id="@+id/dimrix_sub_child_21" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      android:visibility="gone" > 
     </LinearLayout> 
    </LinearLayout> 
</ScrollView> 

i her çocuk için kodunda görünürlüğünü ayarlayabilirsiniz bu örneğidir ve istediğiniz gibi o üst eşleşir.

+1

fillViewport'u true değerine ayarlamak benim durumumda bana yardımcı oldu. – Scadge

+5

Teşekkür ederiz! Beni çok fazla zaman kurtardın! – marienke

+0

hoşgeldiniz (-: –

0

Ben geçici bir çözüm anladım, ama bu cevabı kabul etmeyecektir ve umarım birileri gerçek yanıtı bulacaksınız. Benim liste görünümü fragmanı

, onListItemClick() işleyicisi, ben detay fragmanı üzerinde özelliklerine (minWidth ve MinHeight) bir çift ayarlayın.Daha sonra detay parçasının onCreateView() yönteminde, minimum genişlik ve yüksekliği bu değere ayarlıyorum.

detay fragmanı daha sonra düzgün android:fillViewport="true" kullanmak vb scrollview üzerinde

3

deneyin ekleyerek android: ‘ebeveynin yüksekliğine yüksekliğini ayarlamak’ layout_height =”fill_parent” anlamına Bu ne besbelli değil: senin scrollview

o android hatırlamak fillViewport = "true" ScrollView kullanırken istiyorum. Sonuçta, içeriği her zaman kendisininki kadar uzunsa ScrollView işe yaramaz hale gelirdi. Bu konuda çalışmak için, android: fillViewport adlı ScrollView özniteliğini kullanmanız gerekir. True olarak ayarlandığında, bu özellik, kaydırma görünümünün çocuğunun gerekirse ScrollView'un yüksekliğine genişletmesine neden olur. Çocuk ScrollView'dan daha uzun olduğunda, özniteliğin bir etkisi olmaz.

İlgili konular