我的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>
这就是我得到的:
答案 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>
现在,正确的长职称被正确截断,现在即使是较短的职位,年龄也会直接相邻。
看起来像这样:
长职称:
职称空缺:
答案 4 :(得分:0)
我复制并粘贴了你的布局(编辑:进入我的应用程序)来玩它。我将前两个(职业和年龄)TextView
包裹在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>