我想创建一个类似消息的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>
答案 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);
}