我遇到的问题似乎是,如果我在RelativeLayout中设置了一个视图(例如myButton),设置为alignParentBottom - (根据下面的代码) - 然后使用scrollview包装RelativeLayout(必要时内容将可以在较小的屏幕上查看或当方向更改为横向时 - 然后,当父底部不可见时(例如,当更改为横向时)myButton显示在页面的顶部 - 而不是底部。
如何将视图与屏幕底部对齐并使其保持在底部,即使底部位于滚动下方也是如此?
<ScrollView
android:id="@+id/mainScrollView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:fillViewport="true">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/topLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
... lots of views and stuff
<Button android:layout_alignParentBottom="true"
android:id="@+id/myButton"
android:text="Click Me" />
</RelativeLayout>
</ScrollView>
答案 0 :(得分:25)
从SCrollview中取出按钮,将Scrollview和Button包裹在线性布局中,将scrollview的高度设置为0dip并将其权重设置为1,不要为该按钮设置任何权重属性,因此scrollview可以占据所有剩余空间,只保留按钮在底部的空间方式。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
....lots of views...
</LinearLayout>
</ScrollView>
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="Button" />
</LinearLayout>
答案 1 :(得分:7)
使用fill_parent作为ScrollView子级的高度是没有意义的。您告诉RelativeLayout始终与其父级一样高。在这种情况下,ScrollView变得无用! RelativeLayout的高度应该设置为wrap_content,在这种情况下,根据RelativeLayout包含的内容,alignParentBottom可能无法按预期工作。你应该简单地使用一个LinearLayout,它会简单得多。
答案 2 :(得分:3)
你可以尝试一下
<LinearLayout android:id="@+id/parentLayout"
android:layout_width="fill_parent" android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ScrollView android:id="@+id/mainScrollView"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:layout_weight="1" xmlns:android="http://schemas.android.com/apk/res/android"
android:fillViewport="true">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/topLayout" android:layout_width="fill_parent"
android:layout_height="fill_parent">
... lots of views and stuff
<Button android:layout_alignParentBottom="true" android:id="@+id/myButton"
android:text="Click Me" />
</RelativeLayout>
</ScrollView>
</LinearLayout>
答案 3 :(得分:0)
这些解决方案都没有一个令我满意,因此我将发布自己的解决方案。
<?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:fillViewport="true"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- lots of stuff -->
<Space
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>
很少有解释:当有足够的空间(例如人像)时,空间视图将填充该空间,然后将Button按下。如果没有空间(例如横向),则空间视图的高度将为0,而按钮将位于内容的正下方。
答案 4 :(得分:-1)
有点晚了,但最简单的解决方案是添加
android:below="@id/lots_of_stuffs"
像这样:
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainScrollView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true">
<RelativeLayout
android:id="@+id/topLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/lots_of_stuffs" >
... lots of views and stuff
</LinearLayout>
<Button android:layout_alignParentBottom="true"
android:id="@+id/myButton"
android:text="Click Me"
android:below="@id/lots_of_stuffs" /> <!-- Here is the "hack" -->
</RelativeLayout>
</ScrollView>