LinearLayout
の中にSrollView
が必要であり、そのLinearLayout
にはScrollView
からのマージンが必要です。最初、この問題を解決するために考えられる唯一の方法は、この最後のレイアウトにマージンを設定して、別のLinearLayout
内にLinearLayout
を配置することでした。外側に設定されていると機能しませんLinearLayout.
例:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical"
Android:fillViewport="true"
Android:background="@color/layout_color_green">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:background="@color/layout_color_yellow">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_margin="10dp"
Android:orientation="vertical"
Android:background="@color/layout_color_blue">
</LinearLayout>
</LinearLayout>
</ScrollView>
私の質問は:なぜこれを行う必要があるのですか?
LinearLayout
が1つしかない場合、マージンはありません...
例:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical"
Android:fillViewport="true"
Android:background="@color/layout_color_green">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_margin="10dp"
Android:orientation="vertical"
Android:background="@color/layout_color_blue">
</LinearLayout>
</ScrollView>
次に、同様の問題を検索して、ScrollView
のマージンの代わりにLinearLayout
のパディングを使用するというアイデアを与えてくれるレイアウトをいくつか見つけました。これも私の問題を解決し、別の問題の中にLinearLayout
は必要ありません。これは、よりエレガントなソリューションです。
それでも、LinearLayout
内でScrollView
内の単純なマージンが機能しない理由を理解したいと思います。 ScrollView
内にない場合は、正常に機能するためです。
誰もが理由を知っていますか?
私はソースコードを少し掘り下げました:
ScrollView
はFrameLayout
を拡張します。これにはマージンの問題がいくつかあり、ScrollView
はそれを解決しようとさえしていません。測定中、マージンは基本的に無視されます。
しかし、最終的にはScrollView
自体にパディングを定義できるはずなので、それは問題ではありません(これは肯定ですが、試していません)。単一の子ビューにマージンは必要ありません。
こんにちは、ニケディとリカルド・アマラル、
この回答は解決済みとしてマークされていますが、この問題にいくつかの光を当てたいと思います。
Knickediが言ったように、ScrollViewはFrameLayoutを拡張します。
したがって、私の答えは、scrollView内でLinearLayoutのlayout_gravity
を設定すると、FrameLayout内のlinearLayoutの場合と同様にlayout_margin
がLinearLayoutで機能するということです。
私は同じ問題を抱えていました、そして私はこれを適用しました、そしてそれは私のために働きました。 :)
例:
<ScrollView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="top"
Android:layout_marginTop="30dp"
Android:orientation="vertical" >
</ScrollView>