web-dev-qa-db-ja.com

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

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

なぜこれが起こっているのか誰か知っていますか?

36
Maynn

これは、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" >
42
DavidR

同じ問題がa HorizontalScrollViewnested aScrollView.にありましたが、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>
25
Trevin Avery

この問題を修正するために私が見つけてテストした最良の答えは、@ hadiがこの質問で与えたものです: scrollviewには重力がない。中心としてscrollview内のコンテンツを作成する方法

答えを再開する:

  • 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>
9
Fer

非常にシンプルです。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" >
1
kudlatyIE

Horizo​​ntalscrollビュー内の線形/相対レイアウトからlayout_gravityを削除すると、機能します。

1
Suresh kumar

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

私の場合、問題はrequestFocus/EditTextでした。

あなたの場合、彼らはEditTextではないので、問題は何か他のものです。 scrollviewが上端をカットする問題を抱えている人は、すべてのrequestFocusからすべてのEditTextを削除してみてください。

0
Vipul Purohit