android,如何使textview“成长”从右边?

时间:2011-07-12 21:54:45

标签: android layout textview

我想创建一个类似消息的UI。我正在创建一个列表视图,其中包含两种类型的行:左和右。 每行包含一个TextView。左侧用于显示来自发件人的消息,而右侧用于显示来自当前用户的消息 我想要做的是将右侧的TextView设置为占据屏幕的某个百分比,将文本对齐到左侧,但随着内容动态增长。
澄清一下,这是我想要实现的目标的图像:http://dl.dropbox.com/u/2482095/wanted.png
蓝色行是“左”行,黑色行是“右”行 为此,我使用了LinearLayout和RelativeLayout的各种组合,左侧放置了一个空视图,右侧放置了所需的textView。我得到的是这样的东西,这不是我想要的东西:http://dl.dropbox.com/u/2482095/notWanted1.png(文字总是从确切的位置开始)
我还设法设置了引力:右边,它将文本向右对齐,这也不是我想要的。

有没有办法让TextView与其内容一起成长?

[edit]我的xml文件如下所示:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:padding="5dp">
        <View android:id="@+id/emptyView"
           android:layout_width="80dp"
           android:layout_height="wrap_content"
           android:layout_weight="1" />
        <TextView android:id="@+id/messageBody"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content" />
    </LinearLayout>

3 个答案:

答案 0 :(得分:1)

您应该在TextView上设置layout_width =“wrap_content”,并在空视图上设置layout_weight =“1”。这样,TextView应该尽可能宽,并且空视图将占用额外的空间。

答案 1 :(得分:0)

是的,有你的观点(任何观点)wrap_content。这将允许视图增长到其父级允许的大小。如果您的父母只允许您的视图占用一定的空间,那么孩子将永远不会变大。不是,父母也受父母的限制,依此类推。

答案 2 :(得分:0)

基本上你想要的是如果文本适合一行而右对齐,否则左对齐。

要测量文本的宽度,请使用Paint.measureText()方法。所以你可以在你的观点中使用这样的东西:

Paint paint = new Paint(view.getPaint());
LayoutParams params = view.getLayoutParams();       

int availableWidth = params.width - view.getPaddingLeft() - view.getPaddingRight();

int textWidth = (int) Math.ceil(paint.measureText(view.getText().toString()));

if(textWidth <= availableWidth) {
    view.setGravity(Gravity.RIGHT);
} 
else {
    view.setGravity(Gravity.LEFT);
}
相关问题