【问题标题】:ScrollView cuts off the top and leaves space at the bottomScrollView 切断顶部并在底部留出空间
【发布时间】:2013-04-02 02:50:24
【问题描述】:

当我启动模拟器并进入使用此代码的屏幕时,它会显示大部分文本信息,但会切断屏幕顶部(无法向上滚动)但在底部留下一点空间。

这里是代码;

    <ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:visibility="visible"
    android:fillViewport="true"
    android:id="@+id/backgroundImage" >

 <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_gravity="center"
    android:padding="10dip" >

     <ImageView
        android:id="@+id/earthSymbolImageView"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:src="@drawable/earthsymbol" />

     <TextView
        android:id="@+id/earth_content1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/earth_title"
        android:gravity="center" 
        android:textColor="#FFFFFF"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/earth_content2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/earth_text" 
        android:textColor="#FFFFFF" />

    <Button
        android:id="@+id/backButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/back" />

     </LinearLayout>
    </ScrollView>

有人知道为什么会这样吗?

【问题讨论】:

  • 如果可能,请上传带有问题的屏幕截图。
  • 您是否尝试过删除这个 android:padding="10dip" 并改用 android:margin="10dip" 来完成任务?
  • 尝试删除滚动视图中的android:fillViewport="true" 行,然后检查。
  • i46.tinypic.com/2i77nh3.jpg ,左图显示屏幕底部,右图显示顶部。

标签: android xml scrollview


【解决方案1】:

这是由于您的 LinearLayout 中的 layout_gravity 引起的。由于您的 LinearLayout 在 ScrollView 内,您可能只是想水平居中(在 ScrollView 内垂直居中并没有这样做)。像这样指定您的 LinearLayout 水平居中应该可以解决问题:

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_gravity="center_horizontal"
    android:padding="10dip" >

【讨论】:

  • 我遇到了同样的问题。我在 ScrollView 内的 LinearLayout 中使用 android:layout_gravity="center_vertical"。
  • 同样的事情。线性布局居中而不是水平居中。谢谢! :D 这应该是公认的答案。
  • 谢谢你,我以为我会在尝试成千上万的属性组合时发疯
  • 为什么在 ScrollView 中垂直居中没有意义?当我的应用程序处于纵向模式时,一切都很好,一切都是可见的。我的 ScrollView 由带有登录表单的 CardView(或 FrameLayout 等)组成。当应用程序处于纵向模式并且everythink 可见时,我希望该表单垂直居中。另一方面,当应用程序处于横向模式时,CardView 不适合屏幕,所以我希望它滚动。
  • android:layout_gravity="center_horizontal" 刚刚为我工作。
【解决方案2】:

我在 aScrollView. 中使用 aHorizontalScrollViewnested 时遇到了同样的问题,我将HorizontalScrollViewgravity 设置为center,这导致了问题。只需将其删除即可解决问题。

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

<HorizontalScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center">

    <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

        <TextView
                android:layout_width="1000dp"
                android:layout_height="1000dp"
                android:gravity="center"
                android:layout_gravity="center"
                android:text="New Text"/>
    </LinearLayout>
</HorizontalScrollView>

【讨论】:

  • 即使您没有使用嵌套滚动视图,这也有效。我的滚动视图中有一个线性布局,这对我有用。
【解决方案3】:

我发现并测试过解决此问题的最佳答案是@hadi 在此问题中给出的答案: no gravity for scrollview. how to make content inside scrollview as center

继续回答:

  • 将 ScrollView 放入 RelativeLayout。
  • 在 ScrollView 中,设置以下内容:
    • android:layout_height="wrap_content"
    • android:layout_centerVertical="true"
  • 将您的垂直 LinearLayout 放入 ScrollView。

代码是:

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

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

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

            ...

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

【讨论】:

  • 这种方式似乎没有考虑内视图的下边距。但它是我从现在以来所发现的一切中最接近完美的。
  • 最佳答案 :) 拯救了我的一天
【解决方案4】:

它非常简单 - 你只需要将 layout_gravity 从 LinearLayout 移动到父容器 ScrollView 中:

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:visibility="visible"
    android:fillViewport="true"
    android:id="@+id/backgroundImage" 
    android:layout_gravity="center" >

 <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="10dip" >

【讨论】:

    【解决方案5】:

    从水平滚动视图中的线性/相对布局中删除 layout_gravity,它会起作用。

    【讨论】:

      【解决方案6】:

      在我的情况下,问题是 requestFocusEditText

      在您的情况下,他们不是EditText,所以问题是其他的。对于那些有滚动视图切割顶部边缘问题的人,请尝试从所有EditText 中删除所有requestFocus

      【讨论】:

        【解决方案7】:

        必须在 LinearLayout 中添加 marginBottom

        <ScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:visibility="visible"
        android:fillViewport="true"
        android:id="@+id/backgroundImage" >
        
         <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="center"
        android:padding="10dip"
        android:layout_marginBottom="96dp" >    
        
         <ImageView
            android:id="@+id/earthSymbolImageView"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:src="@drawable/earthsymbol" />
        
         <TextView
            android:id="@+id/earth_content1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/earth_title"
            android:gravity="center" 
            android:textColor="#FFFFFF"
            android:textSize="20sp" />
        
        <TextView
            android:id="@+id/earth_content2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/earth_text" 
            android:textColor="#FFFFFF" />
        
        <Button
            android:id="@+id/backButton"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/back" />
        
         </LinearLayout>
        </ScrollView>
        

        【讨论】:

          【解决方案8】:

          如果您希望 TextView 可滚动,为什么不将 ScrollView 放在这两个元素周围?

           <LinearLayout
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:orientation="vertical"
              android:layout_gravity="center"
              android:padding="10dip" >
          
          
              <ScrollView>
               <ImageView
                  android:id="@+id/earthSymbolImageView"
                  android:layout_width="25dp"
                  android:layout_height="25dp"
                  android:src="@drawable/earthsymbol" />
          
               <TextView
                  android:id="@+id/earth_content1"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="@string/earth_title"
                  android:gravity="center" 
                  android:textColor="#FFFFFF"
                  android:textSize="20sp" />
          
              <TextView
                  android:id="@+id/earth_content2"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="@string/earth_text" 
                  android:textColor="#FFFFFF" />
          
               </ScrollView>
          
              <Button
                  android:id="@+id/backButton"
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:text="@string/back" />
          
          
          
               </LinearLayout>
          

          【讨论】:

          • 我已经解决了这个问题,解决方案是只在 TextView 周围放置 ScrollView。
          • 您错过了 ScrollView 的属性 - 再加上 ScrollView 不能拥有超过直接后代的属性
          猜你喜欢
          • 2017-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-19
          • 2012-12-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多