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

如何防止android上的文本字段溢出相邻的文本字段?,android,android-layout,Android,Android Layout,我对android的布局有问题 我有一行有三个文本视图:职位、年龄和日期。 我希望日期向右对齐,职务向左对齐。年龄应与职务名称对齐 问题是,职位名称可能变得很长。我希望它不会与其他视图重叠,而是自动被截断。其他两个文本视图应始终可见 有什么办法可以做到这一点吗?我希望我的布局跨越整个屏幕宽度,因此不希望使用绝对宽度 我的布局如下所示: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="h

我对android的布局有问题

我有一行有三个文本视图:职位、年龄和日期。 我希望日期向右对齐,职务向左对齐。年龄应与职务名称对齐

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

有什么办法可以做到这一点吗?我希望我的布局跨越整个屏幕宽度,因此不希望使用绝对宽度

我的布局如下所示:

<?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>
<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>

这就是我得到的:

试试这个:

 <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>

我会这样做,调整布局重量以获得所需的宽度

<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"/>


我建议您为父布局添加权重和属性,并相应地将权重赋予子布局。

多亏了本文()中的提示,我终于找到了一个可行的解决方案

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

我的解决方案如下:

<?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>
<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>

长职称现在被正确地截断,年龄现在甚至与短职称直接相邻

这看起来像:

长期职称:

简称:

我复制并粘贴了你的布局(编辑:到我的一个应用程序中)来玩它。我将您的前两行(职业和年龄)
TextView
s包装在一个
LinearLayout
中,并在职业
TextView
中添加了两行以使其正常工作。我希望这有帮助。我添加了
android:maxEms
android: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>


为所有文本视图提供布局权重。请看[这里][1]。[1] :为所有文本视图提供布局权重。请看[这里][1]。[1] 当前位置我已经试过了,但没有达到我想要的。我希望“年龄”文本字段直接位于“职务”文本字段的右侧。对于带有权重的线性布局,两个文本字段将占用相同的空间量或我分配给它们的空间权重的空间比例,但我没有正确处理,因此职位和年龄之间没有空间。谢谢,我尝试过。但是要知道,当职位较短时,职位和年龄之间会有很大的差距。我希望这个年龄能直接反映出我的职称。剩余空间应仅在年龄和日期之间。这怎么可能?谢谢阿南德。我还没有看到你编辑了你的帖子。这和我当时提出的解决方案是一样的。这管用!不幸的是,这不是我需要的。请参阅我对上面@Anand建议的评论。