RelativeLayout的问题

时间:2012-04-04 05:28:20

标签: android android-layout scrollview relativelayout

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

在分辨率较高的设备中,我想在页面上插入页眉和页脚,并为内容区域保留任何可用空间。 在低分辨率的设备中,考虑将内容长度尽可能少(类似于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,因为内容在页眉和页脚之间。 我也尝试过使用min-height,但没有成功。

2 个答案:

答案 0 :(得分:1)

顶级RelativeLayout layout_height生成fill_parent。 然后FrameLayout删除了layout_above属性,只是说它在标题下面就足够了。

最后,FrameLayout可能导致问题,因为当屏幕上只有1个元素并且它填满屏幕时,它通常会被使用。尝试用LinearLayout替换它。我在我的某个应用中做了一些与你想要的完全相同的东西,布局是(请记住,在我的情况下,我换出了FrameLayouts Fragments LinearLayoutRelativeLayout基于{1}}。

<?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>

答案 1 :(得分:0)

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

为了解决全球解决方案问题,我使用了weightsumweight,应用权重也会修复页眉和页脚区域和内容区域。

这样我就在我的项目中完成了解决这个问题,试试看,希望它对你有用。

示例

<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> 

感谢。