如何阻止TextView扩展到其他项目RelativeLayout?

时间:2011-06-26 14:55:01

标签: android view relativelayout

我在相对布局中有一个TextView和一个ImageView:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:paddingLeft="10dip" android:id="@+id/itemRoot"
    android:clickable="false">

    <TextView android:layout_width="wrap_content" android:text="TextView"
        android:layout_height="wrap_content" android:id="@+id/itemTxt"
        android:layout_alignParentLeft="true" android:layout_centerVertical="true"
        android:singleLine="true"></TextView>
    <ImageView android:id="@+id/delBtn" android:layout_height="wrap_content"
        android:src="@drawable/delete" android:layout_width="wrap_content"
        android:layout_alignParentRight="true" android:paddingRight="10dip"
        android:layout_centerVertical="true"></ImageView>

</RelativeLayout>

但是,当文本变得太长时,它会与ImageView重叠,一直到屏幕的末尾,然后是“......”。但我希望它停止ImageView的开始。我无法将TextView一直延伸到ImageView,因为我下面还有一些背景看起来很难看。所以我尝试在2个视图之间添加一个空白的透明间隔:

<TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:id="@+id/spacer"
        android:layout_alignTop="@+id/itemTxt" android:layout_alignBottom="@+id/itemTxt"
        android:layout_toLeftOf="@+id/delBtn" android:layout_toRightOf="@+id/itemTxt"
        android:minWidth="5dip" android:background="@android:color/transparent"></TextView>

但是,我仍有同样的问题。只要文本不太长,间隔就可以很好地工作。但是因为相对于ParentLeft定义了itemTxt,它只是将间隔推出屏幕,而且我也无法定义它与间隔符一样,因为SDK抱怨它是循环的。

有什么想法吗?

亚历

4 个答案:

答案 0 :(得分:3)

这是你想要的吗?

将textview保持在Imageview上方:

 <TextView
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:ellipsize="end"
    android:text="BLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah"/>

或者你的意思是彼此相邻吗?

使用线性布局:

 <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/itemRoot"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="10dip"
    android:orientation="horizontal"
    android:clickable="false">
    <TextView
        android:id="@+id/itemTxt"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:text="TextView"
        android:layout_height="wrap_content"
        android:singleLine="true"/>
    <ImageView
        android:id="@+id/delBtn"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:paddingRight="10dip" 
        android:src="@drawable/delete"/>
</LinearLayout>

答案 1 :(得分:1)

ImageView之前声明TextView,以便其ID已经可用并将以下属性添加到<TextView>元素:android:layout_toLeftOf="@id/delBtn"

答案 2 :(得分:0)

首先,使用LinearLayout和权重而不是RelativeLayout并不是一个好主意,特别是在ListView中使用此LinearLayout的情况下。这样做的原因是,当您使用权重时,Android会进行两次传递以渲染LinearLayout。而这个事实可能破坏ListView的性能。 您必须在布局xml中的T​​extView之前声明ImageView,然后将此属性添加到TextView中,而不是使用权重:

android:layout_toLeftOf="@id/delBtn"

答案 3 :(得分:0)

在相对布局中这样的问题可以通过使用相应的属性固定终点(右,左,上,右)来解决

因为我们只需要限制宽度,所以按左右放置终点就足够了 所以只有两个属性可以做到 android:layout_toRightOfandroid:layout_toLeftOf

所以如果你想要textView的话 id =地方 在两个视图之间(TextView,ImageView或任何其他) id =强度(左侧)和 id =时间(右侧) 以下是代码:

`<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/place"
        android:layout_toRightOf="@id/intensity"
        android:layout_toLeftOf="@id/time"
        android:text="hokage's house konoha hidden leaf village naruto universe "
        android:textStyle="bold"
        android:layout_below="@id/proximity"
        />`

上面的代码给了我们: image with both atributes of width and large text

注意如果仅使用android:layout_toLeftOf属性,那么在较小的文本文本上可能会被排列在右侧image with only one attribute and small text "hokage's home "

所以使用这两个属性更好 使用小文本也可以得到完美的结果