如何将相对布局的子视图的高度设置为总屏幕高度的百分比

时间:2015-10-08 09:21:07

标签: android

我有一个相对的主要布局,所以我可以设置一个视图在布局的底部对齐。问题是我想使用布局重力将视图的宽度设置为百分比,但由于相对布局不支持布局重力,我无法这样做。

如何将相对布局的子视图的高度设置为总屏幕高度的百分比?

修改

我已尝试使用线性布局,但我不能将android:layout_alignParentBottom="true"用于线性布局。问题的关键在于视图需要位于屏幕的底部,但高度为百分比,这与布局重力无关。这是一个问题22.解决方案是什么?求助于程序化设置?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingTop="0dp"
android:paddingBottom="0dp"
tools:context=".MainActivity"
android:id="@+id/activity_main"
android:orientation="vertical">

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

<View android:id="@+id/rectangle_at_the_bottom"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:background="#00FFFF"
    android:layout_alignParentBottom="true" />

</RelativeLayout>

4 个答案:

答案 0 :(得分:0)

使用LinearLayout代替RelativeLayout并根据需要指定权重。

答案 1 :(得分:0)

请检查以下布局文件,因为我在屏幕上创建了一个:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0.2" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

<RelativeLayout
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:orientation="vertical" >

    <!-- The view I want to set the height as a percentage -->

    <View
        android:id="@+id/rectangle_at_the_top"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="#00FFFF" />

    <!-- My list view -->

</RelativeLayout>

答案 2 :(得分:0)

替换

<View android:id="@+id/rectangle_at_the_top"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:background="#00FFFF"
    android:layout_alignParentBottom="true"/>

<LinearLayout android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_below="@id/listView1"
    android:orientation="vertical"
    android:weightSum="1">
       <View android:id="@+id/rectangle_at_the_top"
         android:layout_width="match_parent"
         android:background="#00FFFF"
         android:layout_height="0dp"
         android:layout_weight="0.5" />
</LinearLayout>

在这里,我假设您想要填充50%的剩余空间,因此将layout_weight设置为0.5。您可以用所需的百分比替换它。

答案 3 :(得分:0)

我自己想出了解决方案。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    android:paddingTop="0dp"
    android:paddingBottom="0dp"
    tools:context=".MainActivity"
    android:id="@+id/activity_main"
    android:orientation="vertical">

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_alignParentBottom="true"
        android:layout_above="@id/listView1">

        <View android:id="@+id/rectangle_at_the_bottom"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#00FFFF" />
    </LinearLayout>

</LinearLayout>