2017-07-25 72 views
0

我在我的應用程序中有一個活動,我希望用戶能夠垂直滾動LinearLayout中包含的內容,而該內容又位於ScrollView之內。這裏是什麼這項活動佈局XML看起來像一個總結:LinearLayout在ScrollView Android中被切斷

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent"> 
     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_margin="20dip" 
      android:orientation="vertical"> 

      <!-- a bunch of standard widgets, omitted for brevity --> 

      <!-- everything renders but starting in this TextView --> 
      <!-- content begins to get truncated --> 
      <TextView 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:paddingLeft="20dp" 
       android:gravity="left" 
       android:textSize="20dip"/> 

      <!-- this View, really just a trick for a horizontal row, is --> 
      <!-- completely cutoff --> 
      <View 
       android:layout_width="fill_parent" 
       android:layout_height="2dip" 
       android:layout_marginTop="10dp" 
       android:layout_marginBottom="10dp" 
       android:background="@color/green" /> 
     </LinearLayout> 
    </ScrollView> 
</LinearLayout> 

我所觀察是在內部LinearLayout內容正被該ScrollView內側截止。在上面的最後TextView中,當它包含很少的文本時,那麼它下面的View會以縱向渲染,但不會橫向渲染。當這個TextView包含大量文本時,它會在縱向模式下截斷。

我嘗試了我在Stack Overflow上找到的建議。將底部填充添加到ScrollView不能解決問題,也不會將ScrollView替換爲NestedScrollView

任何有用的建議將受到歡迎。這實際上是一個阻礙者。

+0

添加屏幕截圖 –

+0

@OussemaAroua除非絕對必要,否則我寧願不分享屏幕截圖。你爲什麼認爲這會有所幫助?基本上你會看到我在問題中描述的內容,除了底部的一些東西正在被切斷。我希望你能看到我看不到的缺陷。 –

+0

嘗試將一些內部視圖高度設置爲match_parent,例如LinearLayout的 – stan0

回答

6

將您的內部LinearLayout的邊距改爲填充。或者,如果您真的需要它作爲保證金(也許您使用的是自定義背景),請將您的LinearLayout換成FrameLayout

ScrollView正在從LinearLayout其高度(或更準確地說,它正在計算它的可滾動範圍)。此值不包括保證金,因此您的ScrollView將由「LinearLayout」的上下保證金總和「過短」。

+0

換句話說,ScrollView被分配了一個太短的高度,然後當它實際查看它的LinearLayout時,它停止縮短並截斷頂部和底部邊距的總和,我的情況是40dp。 –

+0

我相信它就像CSS盒子模型一樣簡單;填充是視圖尺寸的一部分,邊距不是。看看'ScrollView.canScroll()'...它比較'ScrollView'的高度和第一個孩子的身高。 –

+0

感謝您的幫助,您創造了我的一天。我很驚訝,我在這上面找不到任何東西......也許我正在尋找錯誤的東西。希望你的回答能夠幫助另一個疲憊的Android開發者:-) –

0

邊距被忽略,而測量,見this

,這樣可以提供填充到您的ScrollView並從LinearLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="20dp"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <!-- a bunch of standard widgets, omitted for brevity --> 

     <!-- everything renders but starting in this TextView --> 
     <!-- content begins to get truncated --> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:paddingLeft="20dp" 
      android:gravity="left" 
      android:textSize="20dip"/> 

     <!-- this View, really just a trick for a horizontal row, is --> 
     <!-- completely cutoff --> 
     <View 
      android:layout_width="match_parent" 
      android:layout_height="2dip" 
      android:layout_marginTop="10dp" 
      android:layout_marginBottom="10dp" 
      android:background="@color/green" /> 
    </LinearLayout> 
</ScrollView> 

此外fill_parent去除利潤率已被棄用,並更名爲match_parent API等級8以上

+1

在滾動視圖上使用填充會產生一些不一定令人失望的後果。首先是內容將被填充剪輯(儘管你可以通過android:clipToPadding =「false」來解決這個問題)。另一個(我不知道如何解決)是滾動條將在填充內。 –

+0

是的,我同意,滾動條將在填充內。感謝您指出了這一點 –