ScrollView滚动,但没有完全显示其内容

时间:2014-07-30 12:13:13

标签: android android-layout android-linearlayout textview android-scrollview

我已使用此代码

将我的布局划分为2个滚动视图
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<RelativeLayout

    android:layout_width="match_parent"
    android:layout_height="0px"
    android:background="@drawable/ashokb"
    android:layout_weight="4" >
<ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true" 
    android:background="@drawable/flagc">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" 
        android:layout_gravity="center">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:text="Large Text"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="#000000" />

        <Button
            android:id="@+id/button1"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_marginLeft="-50dp"
            android:background="@drawable/ic_menu_share" />

    </LinearLayout>

    <TextView
            android:id="@+id/textView5"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Medium Text"
            android:textColor="#000000" 

            android:gravity="center"
            android:textAppearance="?android:attr/textAppearanceMedium" />

  </LinearLayout>
</ScrollView>
</RelativeLayout>

<RelativeLayout

    android:layout_width="match_parent"
    android:layout_height="0px"
    android:background="@drawable/ashokb"
    android:layout_weight="1" >

    <ScrollView
        android:id="@+id/scrollView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" >

        <TextView
            android:id="@+id/textView3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"       
            android:text="Medium Text"
               android:textColor="#000000"      
            android:textAppearance="?android:attr/textAppearanceMedium"
             />

    </ScrollView>

</RelativeLayout>
</LinearLayout>

这显示在GraphicalLayout中,如enter image description here

在设备&amp;仿真器视图在对话框中变得正确,我想要:enter image description here

问题:如果textview中的文本很小,那么第一个scrollview的行为与预期的一样正常,但如果texview中的文本很大,那么即使完全滚动后整个文本也不可见,而是滚动结束时显示空白。如本视频所示

http://youtu.be/fIqzTQ8neGs

在最后点击的项目中看到,第一个scrollview没有完全显示其内容。

我希望你能清楚地解决这个问题。

任何解决方案?

3 个答案:

答案 0 :(得分:6)

基本上,您在布局文件中设置了许多不必要的属性。但是,您的问题是由android:layout_gravity顶部LinearLayout设置的ScrollView属性造成的:

<ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" 
        android:layout_gravity="center">

删除android:layout_gravity="center"将解决您在ScrollView内的裁剪内容问题。


顺便说一句:如果其内部的内容小于ScrollView,并且您希望将其置于内部,则应使用不同的方法。您不希望将孩子直接置于ScrollView内,但您应该将ScrollView填充为唯一的孩子,并将内容置于此孩子的中心。通常,您可以在此android:layout_height="match_parent"LinearLayout上设置android:gravity="center"。但是在ScrollView中你不能使用这种方法 - ScrollView直接孩子的高度应始终为wrap_content并将其设置为match_parent不会起作用。但是ScrollView中有一个属性允许这样的行为,它被称为setFillViewport(boolean fillViewport),您应该将其设置为true,如下所示:

<ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:fillViewport="true">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" 
        android:gravity="center">

除了ScrollView中的后续行没有任何意义。它基本上将ScrollView设置为center android:layout_centerHorizontal="true" android:layout_centerVertical="true" ,但由于它与其父级的大小相匹配 - 它不能位于中心。

ScrollView

顺便说一句。第二个android:layout_height不应将wrap_content设置为match_parent。请将其更改为{{1}}。

此外,您应该尝试简化布局和属性数量(尤其是所有“重力”:)

答案 1 :(得分:1)

我认为通过使用视差效果可以优雅地解决您的问题。看看吧 - 你可以检查一下  Github project

您可以从here

获取演示应用

答案 2 :(得分:0)

我使用了您的xml代码并通过删除 layout_gravity =“center”属性来更改它。现在它有效。除了背景,您可以使用下面给出的xml代码。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" 
android:background="#ec2345">

<RelativeLayout

android:layout_width="match_parent"
android:layout_height="0px"
android:background="#ec1234"
android:layout_weight="1" >

<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000000">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" 
    >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1" 
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="#ffffff" />

    <Button
        android:id="@+id/button1"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginLeft="-50dp"
        android:background="#ffffff" />

</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:layout_gravity="center">
<TextView
        android:id="@+id/textView5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Medium Text"
        android:textColor="#ffffff" 

        android:gravity="center"
        android:textAppearance="?android:attr/textAppearanceMedium" />
 </LinearLayout>
 </LinearLayout>
 </ScrollView>
 </RelativeLayout>

 <RelativeLayout

  android:layout_width="match_parent"
  android:layout_height="0px" 
  android:layout_weight="1" >

<ScrollView
    android:id="@+id/scrollView2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true" >

    <TextView
        android:id="@+id/textView3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"       
        android:text="Medium Text"
           android:textColor="#000000"      
        android:textAppearance="?android:attr/textAppearanceMedium"
         />

</ScrollView>

</RelativeLayout>
</LinearLayout>