5

我正在尝试获取一行文本,类似于

foofoofoo - barbarbar

但如果它不适合一行,我希望它省略 foo 和 bar。即我正在尝试缩短它们。

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TextView android:id="@+id/text_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:maxWidth="0dip"
        android:layout_weight="1"
        android:textColor="#ffffff"
        android:singleLine="true"
        android:ellipsize="true"
        android:text="foofoofoofoo" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#ffffff"
        android:text=" - " />
    <TextView
        android:id="@+id/text_2"
        android:layout_width="wrap_content"                         
        android:layout_height="wrap_content"
        android:maxWidth="0dip"
        android:layout_weight="1"
        android:textColor="#ffffff"
        android:singleLine="true"
        android:ellipsize="true"
        android:text="barbarbarbar" />
</LinearLayout>

忍受我这部分工作。

设置TextView's layout_widthto be0diplayout_weightto be1意味着它们将分别占用 50% 的可用空间。

设置singleLinetotrueellipsizetotrue意味着它们看起来像foofoo...如果文本大于容器。

因此我的结果(如果文本更长)应该是

foofoo.. - barbar..

它是哪一个!所以这行得通。

现在我要解决的情况是,如果第一个TextView(id:text_1) 的文本小于给出的 50%layout_width="0dip"并且layout_weight="1"我想要它wrap_content。否则它看起来像:

foo 空格 - barbar..

而且我要

foo - barbarbar

这就是为什么我已经更改layout_width="wrap_content"并添加了android:maxWidth="0dip"但这不起作用!它似乎无视我的说法wrap_content,仍然给这个观点 50%!

我读到您需要添加android:adjustViewBounds="true"formaxWidth才能工作,但这没有影响。

4

2 回答 2

10

这是我能做的最好的,尝试更改字符串以查看它是否按预期工作。

<?xml version="1.0" encoding="utf-8"?>
<TableLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:shrinkColumns="0,2"
    android:stretchColumns="0,2">
    <TableRow>
        <TextView android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:ellipsize="end"
            android:text="foofoofoo"/>
        <TextView android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="-"
            android:gravity="center_horizontal"/>
        <TextView android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:ellipsize="end"
            android:text="barbarbarbarbarbarbarbarbarbarbarbar"/>
    </TableRow>
</TableLayout>
于 2011-03-09T18:06:08.637 回答
2

很难准确地说出你想要什么,但我相信答案是你不能这样做,除非你在代码中动态调整你的布局。这样做的原因是因为您要求系统以多种不同的方式工作。

首先,当视图中的文本数量相同时,您希望视图平等地共享空间。

其次,当另一个视图中的文本较少时,您希望视图不平均共享空间。

这里还有多种其他情况可以按照您想要的任何方式处理。然而,我想要传达的是,您要求相同的布局以不同的方式处理事情,这就是为什么您无法通过单一布局实现这一目标。

于 2011-02-10T17:34:42.040 回答