我有以下观点,它基本上是一个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
(通过适配器)中使用布局时,这可以正常工作:
但是当我使用相同的布局并将其添加到HorizontalScrollView
或ViewPager
时,视图不会遵循其根布局(240dp)中设置的高度:
为什么会这样?
答案 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。