12

LinearLayout içeren bir ScrollView'den oluşan bir Fragmanla ilgili sorunlar yaşıyorum. LinearLayout'un beyaz bir arka plana sahip olduğu ve renkli bir arka plan üzerinde kayan bir kağıda benzediği bir etki yaratmaya çalışıyorum. Buna ulaşmaya çalıştığım yol, ScrollView parçasının tam alanını işgal etmesi ve daha sonra içerisindeki LinearLayout'un "paper" etrafında boşluk yaratmak için android:layout_margin="16dp" olmasıdır.ScrollView, iç LinearLayout'un alt kenar boşluğunun sonuna kaydırmıyor

Bu şekilde, ScrollView öğesinin kaydırma çubuğu renkli arka plan alanında görünür, üstteki kenar boşluğu içeriğiyle birlikte kaydırılır ve alt kısımdaki kenar boşluğu yalnızca son noktaya ulaştığında kaydırılır.

Bu yapılandırmada maalesef ScrollView sonuna kadar ilerlemeyecek ve aslında alttaki çok az miktarda metni kesecektir. ScrollView’un, çocuğun dikey kaydırma mesafesindeki kenar boşluklarını hesaba katmadığından şüpheleniyorum. Bunu çözmek için LinearLayout'u sorunu çözen bir FrameLayout'a sardım ama gereksiz görünüyor. Bu gereksiz konteyner nasıl ortadan kaldırılacağına dair herhangi bir işaret takdir edilecektir.

Not: Daha sonra dolgu sürekli bakılmaksızın kaydırma konumunun dört kenarındaki göründüğü gibi, scrollview üzerinde android:padding="16dp" ayarlama ve istenen etkiyi yok marjları hurdaya.

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    tools:context=".ArticleFragment" > 

    <!-- This FrameLayout exists purely to force the outer ScrollView to respect 
     the margins of the LinearLayout --> 
    <FrameLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:padding="10dp" 
      android:layout_margin="16dp" 
      android:background="@color/page_background" > 

      <TextView 
       android:id="@+id/article_title" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:textIsSelectable="true" /> 

      <TextView 
       android:id="@+id/article_content" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:textIsSelectable="true" /> 

     </LinearLayout> 
    </FrameLayout> 
</ScrollView> 
+1

'android ayarı çalıştı? –

+0

@AdilSoomro Evet, sevinç yok. ScrollView'ın boyutu gerçekten bir sorun değil - uygun şekilde kullanılabilir alanı doldurur. Sağladığı kaydırma alanı - hemen çocuğun bir marjı olduğunda içeriğinin sonuna kadar kaydırmaya izin vermez.Sorunun, kaydırma alanını hesaplarken çocuğun hesabını dikkate almamasından kaynaklandığına inanıyorum. –

cevap

0

Ben FrameLayout kurtulmak istiyorum ve düzen yüksekliği olarak match_parent set ile LinearLayoutScrollView çocuğunu olun. Bu hala işe yaramazsa, alt kenar boşluğunu View numaralı başka bir seçenekle LinearLayout'daki son öğe olarak istenen yükseklik ve arka planla değiştirmeyi düşünün.

+0

Match_parent, scrollView içinde olmalıdır. Ve scrollView'ın alt öğesinin heigh = "wrap_content" olması gerekir. –

+0

Ah iyi nokta. İkinci seçenek muhtemelen en iyisi olur. – Wenger

+2

Bu kombinasyonların hiçbiri sorunu çözmez. LinearLayout'un sonunda istenen kenar boşluğu yüksekliğinin eklenmesi, dürüst olmak gerekirse FrameLayout'a sarmaktan biraz daha fazladır. ScrollView neden bu şekilde davranıyor ve üst ve alt kenar boşluklarını görmezden geliyor? –

5

Bir şekilde içerik düzeni en üstteki kenar boşluğuna sahip olduğunda, içeriklerinin sonuna getirmeyerek ScrollView ile ilgili sorun yaşıyorum.

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    tools:context=".ArticleFragment" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="10dp" 
     android:layout_margin="16dp" > 

     <TextView 
      android:id="@+id/article_title" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:textIsSelectable="true" 
      android:background="@color/page_background" /> 

     <TextView 
      android:id="@+id/article_content" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textIsSelectable="true" 
      android:background="@color/page_background" /> 


     <!-- Add a little space to the end --> 
     <View 
      android:layout_width="fill_parent" 
      android:layout_height="30dp" /> 

    </LinearLayout> 
</ScrollView> 

Tamamen üst/alt kenar boşluklarını önlemek için LinearLayout başında da benzer boş bir görünüm kullandı: Ben LinearLayout sonuna boş bir görünüm ekleyerek biraz kesmek ile sorunu çözdü.

DÜZENLEME: Görüntülemenin sonuna ulaşırken "kağıdın" sonunu da göstermesini istediniz. Bu durumda, arka plan rengini, düzenin kendisi yerine TextView s olarak ayarlamak isteyebilirsiniz. Ardından, başlık ile makale arasında boşluk bulunmadığından emin olun (ayırma olarak dolgu kullanın).

EDIT2: Soruların ne zaman sorulduğunu kontrol etmeyi öğrenmeliyim ... Eh, belki bu hala birine yardımcı olur. :)

1

Sorun eskiydi, ancak FrameLayout'u kaydırırken ScrollView ile kötü davranılan sorunlar yaşadım. Ayrıca, içerdiği düzenlerin kenar boşluklarını dikkate almıyor gibi görünüyor. FrameLayout'u doğru bir şekilde ölçmesi gereken başka bir tek çocuk LinearLayout ile değiştirebilirsiniz. Tamamen FrameLayout çıkarılıp sadece iç düzeni dolgu ile özetlenebilir marjı ilave ederdi: `ScrollView` için layout_height = "fill_parent"`:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:padding="26dp" 
      android:background="@color/page_background" > 
<!--...--> 
İlgili konular