Android布局使用layout_weight,layout_width和maxWidth

时间:2011-02-10 16:49:21

标签: android android-layout textview android-layout-weight

我正在尝试获取一行类似

的文本

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的{​​{1}}设置为layout_width而将0dip设置为layout_weight意味着它们将占用每个可用空间的50%。

1设置为singleLine和将true设置为ellipsize意味着如果文字大于 foofoo ... 容器。

因此我的结果(如果文字较长)应为

  

foofoo .. - barbar ..

它是什么!所以这很有效。

如果第一个true(id:text_1)的文字小于TextView给出的50%,我现在正在尝试修复的情况和layout_width="0dip"我希望它layout_weight="1"。否则看起来像:

  

foo 空格 - barbar ..

我想要

  

foo - barbarbar

这就是我更改wrap_content并添加layout_width="wrap_content"的原因,但这不起作用!似乎忽略了我说android:maxWidth="0dip"并仍然给予这个观点50%!

我知道您需要为wrap_content添加android:adjustViewBounds="true"才能正常工作,但这没有任何影响。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:2)

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

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

其次,当其他视图中的文本较少时,您希望 NOT 的视图平均共享空间。

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