如何防止文本字段溢出android上的相邻文本字段?

时间:2013-01-31 14:50:21

标签: android android-layout

我的Android布局有问题。

我有一行有三个TextView:一个职位,一个年龄和一个日期。 我希望日期与右侧对齐,左侧是职位。年龄应该与职称一致。

问题是职称可能会变得很长。我希望它与视图不重叠,但会自动截断。其他两个文本视图应始终可见。

我是如何实现这一目标的?我希望我的布局跨越整个屏幕宽度,因此不希望使用绝对宽度。

我的布局如下:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
        >

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Softwaredeveloper and some more very long job titles so that the text overflows"
            android:id="@+id/occupation"
            android:layout_gravity="left|center_vertical"
            android:padding="5dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:singleLine="true"
            android:ellipsize="end"/>

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="(32)"
            android:id="@+id/age"
            android:layout_gravity="left|center_vertical"
            android:padding="5dp"
            android:layout_alignParentLeft="false"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/occupation"
            android:singleLine="true"/>

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="01.02.2013"
            android:id="@+id/date"
            android:layout_alignParentLeft="false"
            android:layout_alignParentTop="true"
            android:layout_alignParentRight="true"
            android:singleLine="true"
            android:padding="5dp"/>
</RelativeLayout>

这就是我得到的:

enter image description here

5 个答案:

答案 0 :(得分:0)

试试这个:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="match_parent"
              android:layout_height="wrap_content">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Softwaredeveloper and some more very long job titles so that the text overflows"
            android:id="@+id/occupation"
            android:padding="5dp"
            android:singleLine="true"
            android:layout_weight="1"
            android:ellipsize="end"/>

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="(32)"
            android:id="@+id/age"
            android:padding="5dp"
            android:singleLine="true"/>

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="01.02.2013"
            android:id="@+id/date"
            android:singleLine="true"
            android:padding="5dp"/>
</LinearLayout>

现在尝试一下,它运行正常:

<TableLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:stretchColumns="1"
        android:shrinkColumns="0">

        <TableRow>

            <TextView
                android:id="@+id/occupation"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ellipsize="end"
                android:singleLine="true"
                android:text="Softwaaaaaaa aared " />

            <TextView
                android:id="@+id/age"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:singleLine="true"
                android:text="(32)" />

              <TextView
            android:id="@+id/date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:text="01.02.2013" />

        </TableRow>


    </TableLayout>

答案 1 :(得分:0)

我会做这样的事情,并调整layout_weight以获得所需的宽度

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="horizontal"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
>
   <TextView
        android:layout_width="fill_parent"
        android:layout_height="20dip"
        android:layout_weight=0.3
        android:text="Softwaredeveloper and some more very long job titles so that the text overflows"
        android:textSize="18dip"
        android:id="@+id/occupation"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:singleLine="true"
        android:ellipsize="end"/>
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="20dip"
        android:layout_weight="2"
        android:textSize="18dip"
        android:text="(32)"
        android:id="@+id/age"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:layout_toRightOf="@+id/occupation"
        android:singleLine="true"/>
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="20dip"
        android:layout_weight="1"
        android:textSize="18dip"
        android:text="01.02.2013"
        android:id="@+id/date"
        android:singleLine="true"
        android:padding="5dp"/>

答案 2 :(得分:0)

我建议你为你的父布局添加权重和的属性,并相应地给孩子们赋予权重。

答案 3 :(得分:0)

感谢这篇文章(How to get a layout where one text can grow and ellipsize, but not gobble up the other elements on the layout)中的提示,我终于找到了一个有效的解决方案。

帮助我的是使用表格布局的提示。

我的解决方案如下:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:shrinkColumns="0"
              android:stretchColumns="1">

    <TableRow
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

        <TextView
                android:layout_width="fill_parent"
                android:layout_weight="1"
                android:text="Softwaredeveloper and some more very long job titles so that the text overflows"
                android:id="@+id/occupation"
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:singleLine="true"
                android:ellipsize="end"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"/>

        <TextView
                android:layout_width="fill_parent"
                android:layout_weight="2"
                android:text="(32)"
                android:id="@+id/age"
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:singleLine="true"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"/>

        <TextView
                android:layout_width="fill_parent"
                android:layout_weight="1"
                android:text="01.02.2013"
                android:id="@+id/date"
                android:singleLine="true"
                android:padding="5dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical|right"/>
    </TableRow>

</TableLayout>

现在,正确的长职称被正确截断,现在即使是较短的职位,年龄也会直接相邻。

看起来像这样:

长职称: Long job title with ellipses

职称空缺: Short job title

答案 4 :(得分:0)

我复制并粘贴了你的布局(编辑:进入我的应用程序)来玩它。我将前两个(职业和年龄)TextView包裹在LinearLayout中,并在占领TextView中添加了两行以使其正常工作。我希望这有帮助。我添加了android:maxEmsandroid:singleLine。根据自己的喜好调整android:maxEms值!

<LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation ="horizontal">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Softwaredeveloper and some more very long job titles so that the text overflows"
        android:maxEms="25"
        android:singleLine="false"
        android:id="@+id/occupation"
        android:layout_gravity="left|center_vertical"
        android:padding="5dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:singleLine="true"
        android:ellipsize="end"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="(32)"
        android:id="@+id/age"
        android:layout_gravity="left|center_vertical"
        android:padding="5dp"
        android:layout_alignParentLeft="false"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/occupation"
        android:singleLine="true"/>
</LinearLayout>