したがって、私のレイアウトは基本的に次のようになります。
<ScrollView>
<RelativeLayout>
<BunchOfViews/>
<ImageView Android:layout_alignParentBottom="true"/>
</RelativeLayout>
</ScrollView>
ScrollView
があるので、画面の高さに関係なく、すべてのレイアウトが常に表示されます。問題は、非常に高い画面でも、ImageView
を一番下にしたいということです。ただし、ScrollView
の子には底が定義されていないようです。 View
はレイアウトの上部に配置されます。この問題をきちんと解決するにはどうすればよいですか?
私は同じ問題に遭遇しました。非常に楽しいソリューションを見つけることはできませんでしたが、ここでそれを実現しました。他の誰かがもっと良い方法を持っているかもしれません。何もしないレイアウトを追加するのは嫌です。
私のハックは、scrollviewの下部にfill_parentを持つダミーのlinearlayoutoutを追加して、すべての部屋を占有させ、scrollviewを強制的に画面いっぱいにすることでした。次に、そのlinearlayoutに必要なコンポーネントを追加します。
これを行うレイアウトの1つを次に示します。
<ScrollView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_weight="1"
Android:fillViewport="true" >
<RelativeLayout
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_marginTop="15px" >
<!-- bunch of components here -->
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_below="@+id/spinner"
Android:layout_marginTop="5px"
Android:gravity="center_horizontal|bottom"
Android:paddingTop="2px" >
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:paddingLeft="20px"
Android:paddingRight="20px"
Android:text="Delete" />
</LinearLayout>
</RelativeLayout>
</ScrollView>
私は同じ問題を抱えていて、このページを見つけました:
http://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/
基本的に、ScrollViewのAndroid:fillViewport
をtrueに設定すると、子ビューがScrollView自体と同じ高さまで拡大し、スペースがいっぱいになります。次に、子コントロールのlayout_height
に設定 fill_parent
およびlayout_weight
から1
、そのコントロールを「スプリング」させて空のスペースを埋めます。
ScrollViewのコンテンツが既にScrollViewを満たすのに十分な高さである場合、Android:fillViewport
は効果がないため、設定は必要なときにのみ有効になります。
最終的なXMLは次のようになります。
<ScrollView
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:fillViewport="true">
<LinearLayout
Android:orientation="vertical"
Android:layout_height="wrap_content">
<LinearLayout
Android:layout_height="fill_parent"
Android:layout_weight="1">
<!-- this expands to fill the empty space if needed -->
</LinearLayout>
<!-- this sits at the bottom of the ScrollView,
getting pushed out of view if the ScrollView's
content is tall enough -->
<ImageView
Android:layout_height="wrap_content"
Android:src="@drawable/footer_image">
</ImageView>
</LinearLayout>
</ScrollView>
linearlayoutは必要ないと思われますが、重要なのはfillViewPortだけです。あなたはただ使うことができます
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignBottomParent="true">
これで、相対レイアウトを少なくとも画面のサイズに指定したことになります。
android:fillViewport = "true"の完全にその仕事
ジョエル・マローンの答え スクロールビュー内のレイアウトの下部にビューを追加する はそのトリックを行います。私のソリューションはほぼ同じですが、Space
ウィジェットを使用して、親レイアウト内の残りの高さを埋める作業を行います。このような:
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent
Android:fillViewport="true"
>
<LinearLayout
Android:orientation="vertical"
Android:layout_height="wrap_content"
>
<Android.support.v4.widget.Space
Android:layout_height="match_parent"
Android:layout_weight="1"
/>
<ImageView
Android:layout_height="wrap_content"
Android:src="@drawable/footer_image"
/>
</LinearLayout>
</ScrollView>
注意:
fill_parent
その他の回答では、長い間廃止されていると記載されています。LinearLayout
と比較して、親レイアウトの残りを埋めるには、Space
の方がはるかに適切だと思います(その仕事をするように設計されています)。ScrollView
の先頭にある重要な属性を忘れないでください:Android:fillViewport="true"
。彼らは一緒にこのトリックを作ります。一番下にしたいビューで、Android:gravity = "bottom"を使用します
これはあなたを助けるはずです:
<RelativeLayout
Android:layout_marginTop="-45dip"
Android:padding="0dip"
Android:layout_alignParentBottom="true"
Android:gravity="bottom|right"
Android:background="@Android:drawable/bottom_bar"
Android:layout_height="fill_parent"
Android:layout_width="fill_parent">
<Button
Android:id="@+id/manual_setup"
Android:text="@string/account_setup_basics_manual_setup_action"
Android:minWidth="@dimen/button_minWidth"
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:layout_marginBottom="-4dip"
Android:layout_alignParentLeft="true"
Android:layout_centerVertical="false"
/>
<Button
Android:id="@+id/next"
Android:text="@string/next_action"
Android:minWidth="@dimen/button_minWidth"
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:drawableRight="@drawable/button_indicator_next"
Android:layout_marginBottom="-4dip"
Android:layout_alignParentRight="true"
Android:layout_centerVertical="false"
/>
</RelativeLayout>
ScrollView view = new ScrollView( this );
ScrollView.LayoutParams lps = new FrameLayout.LayoutParams( FILL_PARENT, FILL_PARENT, Gravity.CENTER );
LinearLayout layout = new LinearLayout( this );
// what ever you want in the Layout
view.addView( layout, lps );