40

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

这是代码;

    <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>

有谁知道为什么会这样?

4

8 回答 8

50

这是由于 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" >
于 2013-09-27T19:59:44.177 回答
26

HorizontalScrollView我在嵌套内部遇到了同样的问题,ScrollView.我将HorizontalScrollView重力设置为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>
于 2013-06-07T13:55:18.720 回答
10

我发现并测试了解决此问题的最佳答案是@hadi 在此问题中给出的答案: 滚动视图没有重力。如何使滚动视图内的内容为中心

恢复答案:

  • 将您的 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>
于 2015-09-11T07:21:43.097 回答
2

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

于 2019-09-17T06:52:17.637 回答
2

它非常简单 - 您只需将 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" >
于 2015-07-17T10:04:49.950 回答
0

就我而言,问题requestFocus出在EditText.

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

于 2014-01-31T11:43:54.300 回答
0

您必须在 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>
于 2018-12-04T14:28:39.857 回答
-3

如果您希望 TextViews 可滚动,为什么不将 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>
于 2013-04-10T10:26:02.667 回答