0

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

这就是我得到的:

在此处输入图像描述

4

5 回答 5

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>
于 2013-01-31T14:57:26.813 回答
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"/>

于 2013-01-31T15:02:23.173 回答
0

我建议你为你的父布局添加权重总和的属性,并相应地将权重分配给孩子。

于 2013-01-31T15:23:26.180 回答
0

感谢这篇文章中的提示(如何获得一个文本可以增长和椭圆化的布局,但不能吞噬布局上的其他元素),我终于找到了一个可行的解决方案。

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

我的解决方案如下所示:

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

长职位现在可以正确截断,并且年龄现在直接与较短的职位相邻。

这看起来像这样:

长职称: 带省略号的长职位

简称: 简短的职位名称

于 2013-01-31T15:45:13.237 回答
0

我复制并粘贴了您的布局(编辑:到我的应用程序中)来玩一些。我将您的前两个(职业和年龄)包裹TextView在 a 中LinearLayout,并在职业中添加了两行以TextView使其工作。我希望这有帮助。我添加了android:maxEmsandroid:singleLineandroid: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>
于 2013-01-31T15:47:05.513 回答