我有以下XML。我想在ScrollView下面创建一个静态按钮。我试过设置权重,设置按钮低于滚动视图等。谁能给我一个方法,让按钮留在底部,滚动视图只占用屏幕的中间?
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menuButtons"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal">
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/newItems"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Items" />
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/categories"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Categories" />
</LinearLayout>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/contentScroller"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/menuButtons">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="1" >
<TableRow android:layout_marginTop="5dip"
android:layout_marginBottom="5dip" >
<ImageView
android:src="@drawable/thumbdrive"/>"
<TextView
android:layout_column="1"
android:text="Thumb Drives"
android:padding="3dip"
android:textSize="20dip"/>
</TableRow>
<TableRow android:layout_marginTop="5dip"
android:layout_marginBottom="5dip">
<ImageView
android:src="@drawable/laptop"/>
<TextView
android:layout_column="1"
android:text="Laptops"
android:padding="3dip"
android:textSize="20dip"/>
</TableRow>
<TableRow android:layout_marginTop="5dip"
android:layout_marginBottom="5dip">
<ImageView
android:src="@drawable/sdcard"/>
<TextView
android:layout_column="1"
android:text="SD Cards"
android:padding="3dip"
android:textSize="20dip"/>
</TableRow>
<TableRow android:layout_marginTop="5dip"
android:layout_marginBottom="5dip">
<TextView
android:layout_column="1"
android:text="Other"
android:padding="3dip"
android:textSize="20dip"/>
</TableRow>
<TableRow android:layout_marginTop="5dip"
android:layout_marginBottom="5dip">
<TextView
android:layout_column="1"
android:text="Other"
android:padding="3dip"
android:textSize="20dip"/>
</TableRow>
<TableRow android:layout_marginTop="5dip"
android:layout_marginBottom="5dip">
<TextView
android:layout_column="1"
android:text="Other"
android:padding="3dip"
android:textSize="20dip"/>
</TableRow>
<TableRow android:layout_marginTop="5dip"
android:layout_marginBottom="5dip">
<TextView
android:layout_column="1"
android:text="Other"
android:padding="3dip"
android:textSize="20dip"/>
</TableRow>
<TableRow android:layout_marginTop="5dip"
android:layout_marginBottom="5dip">
<TextView
android:layout_column="1"
android:text="Other"
android:padding="3dip"
android:textSize="20dip"/>
</TableRow>
<TableRow android:layout_marginTop="5dip"
android:layout_marginBottom="5dip">
<TextView
android:layout_column="1"
android:text="Other"
android:padding="3dip"
android:textSize="20dip"/>
</TableRow>
</TableLayout>
</LinearLayout>
</ScrollView>
<Button
android:id="@+id/submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="Submit New Item"
android:layout_below="@id/contentScroller"/>
</RelativeLayout>
我知道这真的很晚了,但有一个更好的解决方案。RelativeLayout方法和将按钮对齐到相对布局底部的问题是,它强制布局高度本质上与fill_parent(或match_parent)相同。
正确的方法如下:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:fillViewport="true">
<!-- Your Scrollview content goes here -->
</ScrollView>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:text="Button Text Goes Here" />
</LinearLayout>
关键是将高度设置为0,然后将布局权重设置为1…从我对布局大小调整过程的了解来看,给它一个0的大小和一个布局权重会导致它在处理完布局中的所有子元素之后才开始调整视图的大小。然后它会在第二次传递中出现,并且能够正确地调整scrollview的大小。
使用RelativeLayout
。从底部的Button
开始,将ScrollView
置于Button
之上。
相对布局- Android开发者
<RelativeLayout
(...)>
<LinearLayout android:id="@+id/ll1"
android:layout_alignParentTop="true"
(...)/>
<Button android:id="@+id/button"
android:layout_alignParentBottom="true"
(...)/>
<ScrollView
android:layout_above="@id/button"
android:layout_below="@id/ll1"
(...)/>
</RelativeLayout>
就像这样。写出来的,所以可能会出现一些错误
将按钮放置在relativeLayout中,并与父元素对齐:
<RelativeLayout android:layout_alignParentBottom="true" android:layout_width="fill_parent" android:orientation="horizontal"
android:layout_height="50px">
<Button
android:id="@+id/submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="Submit New Item"
android:layout_below="@id/contentScroller"/>
</RelativeLayout>