2011-06-26 35 views
2

我有一个TextView和相对布局的ImageView的:如何阻止TextView扩展太远其他项目RelativeLayout?

<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> 

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

有什么想法?

Alex

回答

3

这是您要寻找的?

保持的ImageView以上的TextView:

<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> 
+0

啊哈,我的意思是后者。但是,这仍然不起作用,但是这给了我一个想法。我不得不放置RelativeLayout来添加更多的视图,当我在RelativeLayout上设置android:layout_weight =“1”时,它的工作正常。谢谢。 – Alex

+0

@亚历山大好。考虑一下,为了让LinearLayout工作,你可能会删除singleLine约束。 Congratz正在工作 – Blundell

1

声明ImageView之前TextView使得其ID已经可以和下面的属性添加到<TextView>元素:android:layout_toLeftOf="@id/delBtn"

+0

这仍然扩展到ImageView的实际背景。 – Alex

0

首先,这不是一个好想法使用LinearLayout和权重,而不是RelativeLayout,特别是在ListView中使用此LinearLayout的情况下。其原因在于,当您使用权重时,Android会使用两次传递来呈现您的LinearLayout。而这个事实可能会破坏你的ListView的性能。 而不是使用你的重量在布局XML TextView的前申报您的ImageView,然后将此属性添加到您的TextView的:

android:layout_toLeftOf="@id/delBtn" 
0
中相对布局

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

因为我们需要克制宽度只所以把端点按左右就足够 所以只有两个属性可以做的工作 android:layout_toRightOfandroid:layout_toLeftOf

因此如果您想要的TextView与 ID =放置 之间两个View(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 "

因此同时使用两种属性是更好的 ,将其用小文也使用它提供完美的结果

相关问题