LinearLayout在ScrollView Android中被切断了

时间:2017-07-25 14:32:08

标签: android android-layout scrollview

我的应用中有一项活动,我希望用户能够垂直滚动LinearLayout中包含的内容,而ScrollView内的内容又位于<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> 内。以下是此活动的布局XML的摘要:

LinearLayout

我所观察到的是内部ScrollView中的内容正在TextView内截止。在上面的最后View中,当它包含很少的文字时,它下方的TextView会以纵向呈现,但不会在横向上呈现。当此ScrollView包含大量文本时,它将以纵向模式切换。

我尝试了在Stack Overflow上找到的建议。向ScrollView添加底部填充不能解决问题,也不会将NestedScrollView替换为 public class GridLayout { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here EventQueue.invokeLater(()->{ MyFrame frame = new MyFrame(); //frame.setDefaultCloseOperation(0); //frame.setTitle("Grid Layout"); // frame.setDefault }); } }

欢迎任何有用的建议。这实际上是一个阻碍者。

2 个答案:

答案 0 :(得分:9)

将内部LinearLayout的边距更改为填充。或者,如果您确实需要保证金(可能是您使用自定义背景),请将LinearLayout包裹在FrameLayout

ScrollView正在从LinearLayout获取其高度(或者,更确切地说,它正在计算其可滚动范围)。此值不包含保证金,因此您的ScrollView将会过短&#34;通过LinearLayout的上下边距的总和。

答案 1 :(得分: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>

在API级别8及更高版本中,我们不推荐使用fill_parent并重命名为match_parent