エミュレーターを起動して、このコードを使用する画面に入ると、ほとんどのテキスト情報が表示されますが、画面の上部が表示されません(上にスクロールできません)が、下部に少しスペースが残っています。
これがコードです。
<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>
なぜこれが起こっているのか誰か知っていますか?
これは、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" >
同じ問題がa HorizontalScrollView
nested aScrollView.
にありましたが、HorizontalScrollView
gravityを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>
この問題を修正するために私が見つけてテストした最良の答えは、@ hadiがこの質問で与えたものです: scrollviewには重力がない。中心として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>
非常にシンプルです。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" >
Horizontalscrollビュー内の線形/相対レイアウトからlayout_gravityを削除すると、機能します。
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>
私の場合、問題はrequestFocus
/EditText
でした。
あなたの場合、彼らはEditText
ではないので、問題は何か他のものです。 scrollviewが上端をカットする問題を抱えている人は、すべてのrequestFocus
からすべてのEditText
を削除してみてください。