0

我将应用程序的界面分为三个区域:页眉、内容和页脚。页眉具有固定大小(它只有一个图像),而页脚和内容的大小可以变化。

在分辨率更高的设备中,我想在屏幕上插入页眉和页脚,并为内容区域保留任何可用空间。在具有低分辨率的设备中,考虑将内容长度尽可能短(例如 wrap_content)并在下面插入页脚(要求用户执行滚动以查看页脚)。

我得到的最好的是使用RelativeView:

<RelativeLayout
    android:id="@+id/relativeLayout1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <LinearLayout
        android:id="@+id/header"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_alignParentTop="true" >

        (...)

    </LinearLayout>

    <LinearLayout
        android:id="@+id/footer"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_alignParentBottom="true" >

        (...)

   </LinearLayout>

   <FrameLayout
        android:id="@+id/content"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/footer"
        android:layout_below="@+id/header"
        android:lay >

        (...)

    </FrameLayout>


</RelativeLayout>

对于较大的分辨率可以按预期工作,问题在于对于较小的分辨率:内容少于应有的内容,因为它占用了页眉和页脚之间的空间。

我该如何解决这个问题?假设屏幕的所有可用空间(大分辨率),我找不到另一种获取内容的方法,因为我不能简单地使用 fill_parent,因为内容位于页眉和页脚之间。我也尝试使用最小高度,但没有成功。

4

2 回答 2

1

顶级RelativeLayout layout_height制作fill_parent。然后FrameLayout删除该layout_above属性,只需说它在标题下方就足够了。

最后,FrameLayout可能会导致问题,因为它通常在屏幕上只有 1 个元素并填满屏幕时使用。尝试将其替换为LinearLayout. 我已经在我的一个应用程序中完成了与您想要的完全一样的操作,布局是(请记住,在我的情况下,我将替换FrameLayoutsFragmentswhich areLinearLayoutRelativeLayoutbased。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainBack"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/transparent" >

    <FrameLayout
        android:id="@+id/headerFrag"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <FrameLayout
        android:id="@+id/homeAdMsgFrag"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" />

    <ListView
        android:id="@+id/contactList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/homeAdMsgFrag"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/headerFrag"
        android:background="@color/transparent"
        android:cacheColorHint="@color/transparent" >
    </ListView>

</RelativeLayout>
于 2012-04-04T05:42:57.667 回答
0

在我也遇到这个问题的前几天,为了解决我所做的事情,我创建了Header.xmlfooter.xml并将这两个 xml 包含在我的所有其他活动xml 中,因为这两个在所有其他活动中都很常见。

为了解决全局分辨率问题,我使用了 weightsumweight,应用 weight 也会修复您的页眉和页脚区域以及内容区域。

这样,我在我的一个项目中完成了解决此问题的方法,只需尝试一下,希望它对您有用。

例子

<LinearLayout 
    android:weightSum="10"
    android:orientation="vertical"
    android:id="@+id/relativeLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <LinearLayout 
        android:id="@+id/header" 
        android:layout_width="fill_parent" 
        android:layout_weight="2"
        android:layout_height="0dp" 
        android:orientation="vertical" > 

        (...) 

    </LinearLayout> 


   <FrameLayout 
        android:id="@+id/content" 
        android:layout_width="fill_parent" 
        android:layout_weight="6"
        android:layout_height="0dp"> 

        (...) 

    </FrameLayout> 

    <LinearLayout 
        android:id="@+id/footer" 
        android:layout_width="fill_parent" 
        android:layout_weight="2"
        android:layout_height="0dp" 
        android:orientation="vertical" > 

        (...) 

   </LinearLayout> 

</LinearLayout> 

谢谢。

于 2012-04-04T05:38:58.557 回答