よりエレガントな解決策は、ScrollView
のandroid:fillViewport
プロパティを使用することだと思います。A ScrollView
は、コンテンツビューの処理方法が少し異なります(1つのみを持つことができます)。これにmatch_parent
(fill_parent
)を設定しても、ScrollView
コンテンツビューにそれほど多くのスペースが与えられない代わりに、デフォルトの動作はScrollView
、そのビューに何を指定するかに関係なく、コンテンツ。何android:fillViewport
行うことは教えてくれているScrollView
(ビューポートを埋めるために、その内容を伸ばすことhttp://developer.android.com/reference/android/widget/ScrollView.html#attr_android:fillViewport)。したがって、この場合、LinearLayout
ビューポートに一致するように引き伸ばされ、高さがビューポートの後ろになると、スクロール可能になり、まさに望みどおりの結果になります。
受け入れられた回答は、コンテンツがそれを超えて拡張されると正しく機能しません。ScrollView
これは、コンテンツビューが最初に中央に配置され、ビューの一部が切り取られるためです。またScrollView
、別のレイアウトで中央に配置されても機能しますが、正しくないだけです。私はそれがlintエラーにもなると思います(役に立たない親またはそれらの線に沿った何か)。
次のようなものを試してください:
<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>
ただ、それが今ここにセンタリングされている理由が原因であることを覚えているandroid:gravity
のLinearLayout
ため、ScrollView
ストレッチしますLinearLayout
ので、心の中であなたがレイアウトに追加するものに応じていることを続けます。
ScrollView
センタリングについてでfillViewport
はなく、についての良い読み物はhttp://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/です。