如何填充父级+ wrap_content(按此顺序)Android

时间:2011-08-18 05:30:44

标签: java android layout

我会尝试简化问题以避免长代码片段:我想在我的布局中做类似的事情

Target

结构应该很容易,例如:

 LinearLayoutA (vertical)
      LinearLayoutB (vertical)
           LinearLayoutC    (horizontal)
           LinearLayoutC'   (horizontal)
      LinearLayoutB' (vertical)
           LinearLayoutC''  (horizontal)
           LinearLayoutC''' (horizontal)
  All with weight=1

我的问题是定义在LinearLayoutC中放置什么。所以现在关注LinearLayoutC中的元素:

我的第一个选择是另一个LinearLayout(垂直),问题是如果图像比LinearLayoutC高,则TextView不可见。

所以我使用了RelativeLayout:

<RelativeLayout
    android:id="@+id/RelativeLayout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Eiffel"
        android:textSize="45sp"
        android:id="@+id/text"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:gravity="center"
    ></TextView>
    <ImageView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:src="@drawable/eiffel2"
        android:id="@+id/image"
        android:layout_above="@id/text"
    android:layout_centerHorizontal="true"></ImageView>

</RelativeLayout>

很好用!但不是很长=(。(我们将从现在起调用RelativeLayout1)当屏幕小于视图时,布局看起来很完美但是当进入更大的屏幕时,块与父母的底部对齐,我想要它以屏幕(或子布局)为中心。就像显示屏幕一样:

Problem

这是因为TextView上的android:layout_alignParentBottom =“true”。

试图解决我使用RelativeLayout2来包装RelativeLayout1的代码如下:

<RelativeLayout2
android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>

     <RelativeLayout1
      android:layout_centerInParent="true"
      .....
     ></RelativeLayout1>

 </RelativeLayout2>

但即便如此,布局RelativeLayout1仍然与图像的底部对齐(并且因为它具有height = fill_parent而垂直填满所有屏幕,我不明白为什么会发生这种情况,我该如何解决它。请你可以帮助我吗?我已经试了好几个小时了。提前谢谢

6 个答案:

答案 0 :(得分:2)

添加  ImageView中的android:adjustViewBounds="true"

答案 1 :(得分:1)

从textview中移除android:layout_alignParentBottom="true"并将其添加到您的root relativelayout标记android:layout_centerInParent="true"

答案 2 :(得分:0)

我调试了你的代码..试试这个:

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

    <ImageView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:src="@drawable/eiffel2"
        android:id="@+id/image"
        android:layout_centerHorizontal = "true"

    />

    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Eiffel"
        android:textSize="45sp"
        android:id="@+id/text"
        android:layout_below = "@+id/image"
        android:layout_centerHorizontal = "true"
    />

</RelativeLayout>

答案 3 :(得分:0)

您是否考虑过使用TableLayout?它最适合像这样的网格视图。您甚至可以为不同的列等指定权重,并且具有不同的列宽。

答案 4 :(得分:0)

为你的第二个RelativeLayout使用 android:layout_height =“wrap_content”

答案 5 :(得分:0)

设置

                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"

在ImageView和TextView中,然后使用LinearLayout(以gravity = center为单位)作为容器,它可以正常工作