【问题标题】:Placing a button at the bottom of the page and bottom of a list在页面底部和列表底部放置一个按钮
【发布时间】:2013-07-15 18:29:21
【问题描述】:

如果列表比视图大,我正在尝试将按钮锚定到视图的底部以及列表的底部。

所以我希望它们在列表小于屏幕时看起来像这样:

更大的时候会这样:

我知道我应该使用RelativeLayout 将按钮与android:layout_alignParentBottom="true" 一起放置在页面底部,但是当我还添加android:layout_below="@id/table_wrapper" 时,如果内容小于视图,我的按钮高度会变得混乱:

有谁知道我如何做到这一点?

我的代码的简化版:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/book_layout_whole"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">
    <ScrollView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:fillViewport="true">

        <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
            <LinearLayout
                    android:id="@+id/table_wrapper"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">
                <LinearLayout
                        android:id="@+id/vertical_header_table"
                        android:layout_width="85dp"
                        android:layout_height="wrap_content"
                        android:orientation="vertical">
                    <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="40dp"
                            android:text="Day"
                            android:gravity="center"/>
                    <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="40dp"
                            android:text="Day"
                            android:gravity="center"/>
                    <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="40dp"
                            android:text="Day"
                            android:gravity="center"/>
                    <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="40dp"
                            android:text="Day"
                            android:gravity="center"/>
                    <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="40dp"
                            android:text="Day"
                            android:gravity="center"/>
                    <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="40dp"
                            android:text="Day"
                            android:gravity="center"/>
                    <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="40dp"
                            android:text="Day"
                            android:gravity="center"/>
                </LinearLayout>

                <LinearLayout
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:orientation="vertical">
                    <View
                            android:layout_width="wrap_content"
                            android:layout_height="40dp"
                            android:background="#444444"></View>
                    <View
                            android:layout_width="wrap_content"
                            android:layout_height="40dp"
                            android:background="#444444"></View>
                    <View
                            android:layout_width="wrap_content"
                            android:layout_height="40dp"
                            android:background="#444444"></View>
                    <View
                            android:layout_width="wrap_content"
                            android:layout_height="40dp"
                            android:background="#444444"></View>
                    <View
                            android:layout_width="wrap_content"
                            android:layout_height="40dp"
                            android:background="#444444"></View>
                    <View
                            android:layout_width="wrap_content"
                            android:layout_height="40dp"
                            android:background="#444444"></View>
                    <View
                            android:layout_width="wrap_content"
                            android:layout_height="40dp"
                            android:background="#444444"></View>
                </LinearLayout>
            </LinearLayout>
            <Button
                    android:text="load more"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/table_wrapper"
                    android:layout_alignParentBottom="true"
                    android:gravity="center"
                    android:padding="20dp"
                    />
        </RelativeLayout>
    </ScrollView>
</LinearLayout>

注1:

删除android:layout_below="@id/table_wrapper" 将导致按钮始终位于屏幕底部,即使列表大于屏幕。

注2

添加layout_weight 不起作用,因为我的视图大小是动态的。

【问题讨论】:

  • TextView 应该与视图对齐??
  • 与视图对齐是什么意思?两个LinearLayouts的原因是为了创建标题(文本视图)的效果,一些图标进入灰色区域
  • 只是觉得使用列表视图会更好...
  • 我不能使用 ListView,因为我正在捕获滑动手势和滚动动态填充数据的图标。

标签: android android-layout


【解决方案1】:

那就用following吧,一定能帮到你,我已经测试过了!

      <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="bottom"
        android:layout_alignParentBottom="true"
        android:layout_below="@id/table_wrapper" >

        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="20dp"
            android:text="load more" />
    </LinearLayout>

【讨论】:

  • 这将导致按钮始终位于屏幕底部,即使列表大于屏幕。
  • hmm :) @maclir 测试并告诉我结果如何?
  • 非常感谢 :D 成功了 :) 不知道为什么我从来没想过这个解决方案……我为此苦苦挣扎了很长时间!
【解决方案2】:

我不知道为什么我的帖子被 George Stocker 删除了

检查 maclir 是否适合您:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/book_layout_whole"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:fillViewport="true" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <LinearLayout
                android:id="@+id/table_wrapper"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:orientation="horizontal" >

                <LinearLayout
                    android:id="@+id/vertical_header_table"
                    android:layout_width="85dp"
                    android:layout_height="wrap_content"
                    android:orientation="vertical" >

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="40dp"
                        android:gravity="center"
                        android:text="Day" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="40dp"
                        android:gravity="center"
                        android:text="Day" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="40dp"
                        android:gravity="center"
                        android:text="Day" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="40dp"
                        android:gravity="center"
                        android:text="Day" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="40dp"
                        android:gravity="center"
                        android:text="Day" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="40dp"
                        android:gravity="center"
                        android:text="Day" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="40dp"
                        android:gravity="center"
                        android:text="Day" />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical" >

                    <View
                        android:layout_width="wrap_content"
                        android:layout_height="40dp"
                        android:background="#444444" >
                    </View>

                    <View
                        android:layout_width="wrap_content"
                        android:layout_height="40dp"
                        android:background="#444444" >
                    </View>

                    <View
                        android:layout_width="wrap_content"
                        android:layout_height="40dp"
                        android:background="#444444" >
                    </View>

                    <View
                        android:layout_width="wrap_content"
                        android:layout_height="40dp"
                        android:background="#444444" >
                    </View>

                    <View
                        android:layout_width="wrap_content"
                        android:layout_height="40dp"
                        android:background="#444444" >
                    </View>

                    <View
                        android:layout_width="wrap_content"
                        android:layout_height="40dp"
                        android:background="#444444" >
                    </View>

                    <View
                        android:layout_width="wrap_content"
                        android:layout_height="40dp"
                        android:background="#444444" >
                    </View>
                </LinearLayout>
            </LinearLayout>

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="5.5"
                android:orientation="vertical" >

                <Button
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:padding="20dp"
                    android:text="load more" />
            </LinearLayout>
        </LinearLayout>
    </ScrollView>

</LinearLayout>

【讨论】:

  • 添加 layout_weight 不起作用,因为我的视图大小是动态的。
  • 这不会有任何影响,因为 layout_height 必须设置为 0dp。 stackoverflow.com/a/3996104/1432239
  • Like Knight 评论道:“是的,不需要 0PX。我指的是 Dietel 的 Android For Programmers 书,他们也不使用那个 0px”,
  • 而我只是使用重量将按钮放在底部
  • 如果您坚持使用 0dp 作为高度,只需使用表格包装器更改 Button 的线性布局的权重。
猜你喜欢
  • 1970-01-01
  • 2013-12-02
  • 2011-12-29
  • 2018-02-13
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多