2010-07-20 194 views
1

我一直在创建XML的相对布局时遇到问题,列表项要用于ListView中的一系列项目。我已经尝试了好几个小时,并试图让我的头发看起来如何,但不能让所有东西出现在正确的位置,而且不会重叠或错位。我可以获得第一张图片和下两个文字浏览,但无法获得最后一个textview和imageview。Android相对布局布局问题

我附上了一个线框样式的图像,我想如何看它,并想知道是否有人可以帮我吗?

alt text http://i26.tinypic.com/6fz702.jpg

  • 右边的ImageView的是与它周围的填充行的整个高度的一组图标?
  • 这两个TextView占据了宽度的大部分。地址textview有可能文本很长,所以如果它的空间不足,可能需要截断,或理想的字体大小缩小?
  • 下一个TextView将只保存最多5个字符的小字符串。
  • 最后一个ImageView是一个小箭头,暗示此列表项可点击获取更多信息。它需要如图所示居中。
  • 我想如果图标,上一个textview和最后一个图像总是在列表中相同的地方/对齐。

如果有人能在此提供一些帮助,我将非常感激。

干杯家伙

回答

11

任何有兴趣我设法得到这个工作。我知道寻找问题的答案有多么痛苦,而且它从未完全解决。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/RelativeLayout" 
android:layout_width="fill_parent" 
android:layout_height="?android:attr/listPreferredItemHeight" 
android:padding="6dip"> 
<ImageView 
    android:id="@+id/Icon" 
    android:layout_margin="5dip" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" /> 
<TextView 
    android:id="@+id/topLine" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:lines="1" 
    android:layout_toRightOf="@+id/Icon" 
    android:layout_toLeftOf="@+id/distance" 
    android:textColor="@color/blacktext" 
    android:textSize="20dip" 
    android:text="Name" /> 
<TextView 
    android:id="@+id/bottomLine" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:lines="1" 
    android:layout_toRightOf="@+id/Icon" 
    android:layout_below="@+id/topLine" 
    android:layout_toLeftOf="@+id/distance" 
    android:textColor="@color/blacktext" 
    android:textSize="15dip" 
    android:text="Address" /> 
<TextView 
    android:id="@+id/distance" 
    android:layout_height="wrap_content" 
    android:layout_toLeftOf="@+id/arrow" 
    android:layout_centerVertical="true" 
    android:layout_width="wrap_content" 
    android:lines="1" 
    android:textColor="@color/blacktext" 
    android:textSize="12dip" 
    android:text="100m" /> 
<ImageView 
    android:id="@+id/arrow" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:layout_margin="5dip" 
    android:layout_alignParentRight="true" 
    android:layout_centerVertical="true" 
    android:src="@drawable/redarrow"/> 
</RelativeLayout> 
+0

这不是一个完美的答案,因为名称和地址的高度不一样(每个父母的50%)。 – Wayne 2012-06-20 06:53:33

0

我已经做过类似的(除了在左边的图像)

东西它可以帮助你:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center_vertical" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:orientation="vertical"> 
    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@+id/TextView01" 
     android:id="@+id/LinearLayout01" 
     android:gravity="center_vertical" 
     android:orientation="horizontal"> 
     <LinearLayout 
      android:layout_width="0dip" 
      android:layout_weight="1" 
      android:paddingRight="8dip" 
      android:layout_height="wrap_content" 
      android:id="@+id/LinearLayout01" 
      android:orientation="vertical"> 
      <TextView 
       android:text="@string/Birthday" 
       android:id="@+id/txtTitlevalue" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:singleLine="true" 
       android:ellipsize="end" 
       android:layout_weight="1" 
       android:textAppearance="?android:attr/textAppearanceLarge"></TextView> 
      <TextView 
       android:text="1960-01-01" 
       android:id="@+id/txtSubvalue" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="-4dip" 
       android:singleLine="true" 
       android:ellipsize="end" 
       android:layout_weight="10" 
       android:textAppearance="?android:attr/textAppearanceSmall"></TextView> 
     </LinearLayout> 
     <TextView 
      android:text="2" 
      android:id="@+id/txtNumber" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:textStyle="bold" 
      android:layout_marginRight="10dip" 
      android:layout_gravity="center_vertical|right"></TextView> 
     <TextView 
      android:text="weeks" 
      android:id="@+id/txtUnit" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginRight="10dip" 
      android:layout_gravity="center_vertical|right"></TextView> 
    </LinearLayout> 
    <!-- <View 
     android:background="@drawable/black_white_gradient" 
     android:layout_width="fill_parent" 
     android:layout_height="1dp" 
     android:layout_marginTop="2dip" 
     android:layout_marginBottom="2dip" 
     android:clickable="true" 
     android:focusable="true" 
     android:layout_below="@+id/LinearLayout01" /> --> 
</LinearLayout> 
+0

谢谢,我可能不得不求助于使用LinearLayout,如果我不能得到这个工作。我已经读过,虽然使用LinearLayout列表项行,因此让它为每一行复制创建了许多不必要的开销,而RelativeLayout没有。如果我能找到它,我会再次粘贴链接。感谢您的答案,但最终可能会成为我需要的。 – 2010-07-20 10:58:43

+0

我找到了链接:http://www.curious-creature.org/2009/02/22/android-layout-tricks-1/ 而评论:“这种布局的工作原理,但可以浪费,如果你实例化它用于ListView的每个列表项目,可以使用单个RelativeLayout重写相同的布局,从而保存一个视图,甚至更好地为视图层次结构中的一个级别,每个列表项目。 – 2010-07-21 01:42:59