Android相对布局放置问题
Posted
技术标签:
【中文标题】Android相对布局放置问题【英文标题】:Android relative layout placement problems 【发布时间】:2011-03-18 08:59:57 【问题描述】:我在 XML 中为要用于 ListView 中的一系列项目的列表项创建相对布局时遇到问题。我已经尝试了几个小时,并且正在撕扯我的头发,试图让它看起来像我想要的那样,但无法让所有东西都出现在正确的位置并且不会重叠或错位。我可以得到第一个图像和接下来的两个文本视图,但不能得到最后一个文本视图和图像视图。
我附上了一个线框样式的图像,说明我正在尝试让它看起来如何,想知道是否有人可以帮助我?
右边的 ImageView 是行全高的设置图标,周围有填充? 两个 TextView 占据了大部分宽度。地址文本视图有可能文本很长,因此如果空间不足,可能需要截断,或者最好缩小字体大小? 下一个 TextView 将只包含一个最多 5 个字符的小字符串。 最后一个 ImageView 是一个小箭头,表示此列表项可单击以获取更多信息。它需要如图所示居中。 我希望图标、最后一个文本视图和最后一个图像始终位于列表下方的同一位置/对齐。
如果有人能在这方面提供一些帮助,我将不胜感激。
大家好
【问题讨论】:
【参考方案1】:对于任何感兴趣的人,我设法让这个工作。我知道去寻找一个问题的答案是多么痛苦,但它从未完全解决。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout"
android:layout_
android:layout_
android:padding="6dip">
<ImageView
android:id="@+id/Icon"
android:layout_margin="5dip"
android:layout_
android:layout_
android:layout_centerVertical="true" />
<TextView
android:id="@+id/topLine"
android:layout_
android:layout_
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_
android:layout_
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_
android:layout_toLeftOf="@+id/arrow"
android:layout_centerVertical="true"
android:layout_
android:lines="1"
android:textColor="@color/blacktext"
android:textSize="12dip"
android:text="100m" />
<ImageView
android:id="@+id/arrow"
android:layout_
android:layout_
android:layout_margin="5dip"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/redarrow"/>
</RelativeLayout>
【讨论】:
这不是一个完美的答案,因为姓名和地址的高度不同(父母各占 50%)。【参考方案2】:我做过类似的事情(除了左边的图片)
也许对你有帮助:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="vertical">
<LinearLayout
android:layout_
android:layout_
android:layout_toRightOf="@+id/TextView01"
android:id="@+id/LinearLayout01"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:layout_
android:layout_weight="1"
android:paddingRight="8dip"
android:layout_
android:id="@+id/LinearLayout01"
android:orientation="vertical">
<TextView
android:text="@string/Birthday"
android:id="@+id/txtTitlevalue"
android:layout_
android:layout_
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_
android:layout_
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_
android:layout_
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_
android:layout_
android:layout_marginRight="10dip"
android:layout_gravity="center_vertical|right"></TextView>
</LinearLayout>
<!-- <View
android:background="@drawable/black_white_gradient"
android:layout_
android:layout_
android:layout_marginTop="2dip"
android:layout_marginBottom="2dip"
android:clickable="true"
android:focusable="true"
android:layout_below="@+id/LinearLayout01" /> -->
</LinearLayout>
【讨论】:
谢谢,如果我不能让它工作,我可能不得不求助于使用 LinearLayout。我已经阅读过,将 LinearLayout 用于列表项行,因此为每一行复制它会产生许多不必要的开销,而 RelativeLayout 不会。如果我能找到它,我会再次粘贴链接。不过感谢您的回答,它最终可能是我需要的。 我找到了链接:curious-creature.org/2009/02/22/android-layout-tricks-1 并且评论:“此布局有效,但如果为 ListView 的每个列表项实例化它可能会很浪费。可以使用单个 RelativeLayout 重写相同的布局,从而为每个列表项保存一个视图,甚至更好的视图层次结构中的一层。”以上是关于Android相对布局放置问题的主要内容,如果未能解决你的问题,请参考以下文章