查看不遵循它的高度

时间:2014-04-22 09:24:23

标签: android android-layout

我有以下观点,它基本上是一个ImageView,一些内容(在ImageView内)在顶部,一些内容在底部:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="240dp"
    android:descendantFocusability="blocksDescendants" >

<RelativeLayout
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="240dp"
        android:scaleType="centerCrop"
        android:src="@drawable/girgio" />

    <RelativeLayout
        android:id="@+id/uppercontent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/gradient_up_selector"
        android:padding="4dp" >

        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@id/favbtn"
            android:ellipsize="end"
            android:maxLines="2"
            android:text="test"
            android:textAppearance="@style/LargeTextBold"
            android:textColor="#ffffff"
            android:textStyle="bold" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/lowercontent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@drawable/gradient_down_selector"
        android:padding="8dp" >

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

            <TextView
                android:id="@+id/pricevalue"
                android:text="2000$"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:gravity="center_horizontal"
                android:textAppearance="@style/LargeTextBold"
                android:textColor="@color/mygreen"
                android:textSize="22sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:gravity="center_horizontal"
                android:text="Preis"
                android:textAppearance="@style/SmallText"
                android:textColor="@color/mygreylight" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/areaLayout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginRight="32dp"
            android:layout_toLeftOf="@id/priceLayout"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/areavalue"
                android:text="100m"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:textAppearance="@style/LargeTextBold"
                android:textColor="@color/mygreen"
                android:textSize="22sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:gravity="center_horizontal"
                android:text="Größe"
                android:textAppearance="@style/SmallText"
                android:textColor="@color/mygreylight" />
        </LinearLayout>

        <TextView
            android:id="@+id/city"
            android:text="New York"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_marginBottom="4dp"
            android:layout_toLeftOf="@id/areaLayout"
            android:textAppearance="@style/LargeTextBold"
            android:textColor="#ffffff"
            android:textSize="20sp" />
    </RelativeLayout>
</RelativeLayout>

</RelativeLayout>

当我在ListView(通过适配器)中使用布局时,这可以正常工作:

enter image description here

但是当我使用相同的布局并将其添加到HorizontalScrollViewViewPager时,视图不会遵循其根布局(240dp)中设置的高度:

enter image description here

为什么会这样?

1 个答案:

答案 0 :(得分:0)

您不了解relativeLayout的工作原理。你的布局太难了,在列表中工作会很慢。 首先,这段代码:

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@id/favbtn"
        android:ellipsize="end"
        android:maxLines="2"
        android:text="test"
        android:textAppearance="@style/LargeTextBold"
        android:textColor="#ffffff"
        android:textStyle="bold" />
</RelativeLayout>

您可以替换为:

    <TextView
        android:id="@+id/title"
        android:kayout_margin="4dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@id/favbtn"
        android:ellipsize="end"
        android:maxLines="2"
        android:text="test"
        android:textAppearance="@style/LargeTextBold"
        android:background="@drawable/gradient_up_selector"
        android:textColor="#ffffff"
        android:textStyle="bold" />

它会更简单,就像你的一样。

关于您的问题。 你不能在RelativeLayout里面使用alignParentBottom和height = wrap_content。在不同情况下会导致不同的行为。当你在listView中构建它时,它将具有精确的高度,一切都很好。当你在LinearLayout(或带有水平滚动的viewPager)中使用它时,它将填充父项高度(因为当元素开始在底部绘制时,android不知道如何测量它的高度)。要解决您的问题,请将parent relativeLayout的高度设置为240dp(如内部图像),它将正常工作。

但我建议你阅读android界面的最佳实践。您正在使用许多不必要的布局。您可以放置​​所有可以删除所有相对布局,除了一个(父窗口)。并删除所有LinearLayouts。