ScrollView内のコンテンツを中心にしたい。
<ScrollView
Android:id="@+id/scroller"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:paddingTop="12dp"
Android:paddingBottom="20dp"
Android:scrollbarStyle="outsideOverlay"
Android:layout_gravity="center" >
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="check"
Android:gravity="center_vertical|center_horizontal"/>
</ScrollView>
注:はありませんAndroid:gravity
scrollvewの属性。
任意のソル:-
私は同じ問題を抱えていて、最終的にそれを理解しました。これは垂直ScrollView
用です。
ScrollView
をRelativeLayout
の内側に置き、RelativeLayout
の中央に配置します。これが機能するためには、ScrollView
が
Android:layout_height="wrap_content"
これは最終的なコードがどのように見えるべきであるかです:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<ScrollView
Android:id="@+id/scrollView1"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_centerVertical="true" >
<LinearLayout
Android:id="@+id/linearLayout1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="b1"/>
<Button
Android:id="@+id/button2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="b2"/>
<Button
Android:id="@+id/button3"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="b3"/>
</LinearLayout>
</ScrollView>
</RelativeLayout>
これはどう?
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/scrollView1"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:paddingTop="12dp"
Android:paddingBottom="20dp"
Android:scrollbarStyle="outsideOverlay" >
<LinearLayout
Android:id="@+id/linearLayout1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:layout_gravity="center"
Android:gravity="center">
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="check"
Android:gravity="center_vertical|center_horizontal"/>
</LinearLayout>
</ScrollView>
よりエレガントなソリューションは、ScrollView
のAndroid:fillViewport
プロパティを使用することだと思います。 ScrollView
は、match_parent
(fill_parent
)をScrollView
に設定した場合でも、コンテンツビューの処理方法が少し異なります(1つしか持てません)。 tはコンテンツビューに十分な間隔を空け、代わりに、デフォルトの動作では、ビューに指定した内容に関係なく、ScrollView
がコンテンツをラップします。 Android:fillViewport
が行うことは、ScrollView
にコンテンツをストレッチしてビューポートを満たすように指示することです( http://developer.Android.com/reference/Android/widget/ScrollView.html#attr_Android:fillViewport )。したがって、この場合、LinearLayout
はビューポートに一致するように引き伸ばされ、高さがビューポートの背後にある場合は、まさに望みどおりのスクロールが可能になります。
コンテンツがScrollView
を超える場合、受け入れられた回答は正しく機能しません。これは、コンテンツビューを最初に中央に配置してビューの一部を切り取り、ScrollView
が別のレイアウトの中央に配置されるためです。動作しますが、正しくないと感じますが、リントエラーも発生します(役に立たない親またはそれらの行に沿った何か)。
次のようなものを試してください:
<ScrollView
Android:id="@+id/scroller"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:paddingTop="12dp"
Android:paddingBottom="20dp"
Android:scrollbarStyle="outsideOverlay"
Android:fillViewport="true">
<LinearLayout
Android:id="@+id/content"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:gravity="center">
<Button
Android:id="@+id/button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="check" />
</LinearLayout>
</ScrollView>
ここで中央に配置される理由は、LinearLayout
がScrollView
を引き伸ばすので、LinearLayout
のAndroid:gravity
が原因であることに注意してください。レイアウトに追加します。
ScrollView
のもう1つの良い読み物は、センタリングについてではなく、fillViewport
についてです http://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/
@Patrick_Bossの場合-私のアプリケーションでコンテンツが切り取られないようにしたのは、LinearLayoutの重力とlayout_gravityをcenter_horizontalに変更することでした。
それは私のために働いた...しかしそれがあなたのために働くかどうか確かではない。
@Ghostの答えの修正-
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/scrollView1"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:paddingTop="12dp"
Android:paddingBottom="20dp"
Android:scrollbarStyle="outsideOverlay" >
<LinearLayout
Android:id="@+id/linearLayout1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:layout_gravity="center_horizontal"
Android:gravity="center_horizontal">
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="check"
Android:gravity="center_vertical|center_horizontal"/>
</LinearLayout>
</ScrollView>
ScrollViewでこの属性を使用
Android:fillViewport="true"
例
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scrollbarStyle="outsideOverlay"
Android:fillViewport="true"
>
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<!--Your Code goes here-->
</RelativeLayout>
</ScrollView>
上の例のRelativelayoutと同じように、ScrollViewで必ずSingle Childを使用してください。
考慮すべき点の1つは、設定しないものです。特定の子コントロール、特にEditText
コントロール、しないにRequestFocus
プロパティを設定してください。
これは、レイアウト上で最後に解釈されたプロパティの1つであり、その親の重力設定をオーバーライドします(layout
またはScrollView
)。