当右侧文本变得太大时,左右共享两个TextView会失败

时间:2016-03-04 12:11:41

标签: android android-layout textview

我使用输入字段的解决方案,字段描述占用左侧空间,值使用正确的空间。它通常有效,但如果最右边的文字太宽则不行。然后它只是在最左边的文本后面而不是得到"wrap_content"请求:

<LinearLayout 
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_marginLeft="20dp"
  android:layout_marginRight="20dp"
  android:layout_marginTop="20dp"
  android:background="@drawable/edittext_background"
  android:orientation="horizontal"
  android:padding="10dp">
    <TextView
      android:layout_width="0dp"
      android:layout_weight="1"
      android:layout_height="wrap_content"
      android:background="@null"
      android:ellipsize="end"
      android:singleLine="true"
      android:text="Make of car"
      android:textColor="@android:color/black"
      android:textSize="19dp"/>
    <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:background="@null"
      android:gravity="center_vertical|end"
      android:singleLine="true"
      android:text="Ford Focus 2.0 Gold edition with ..."
      android:ellipsize="end"
      android:textColor="@android:color/black"
      android:textSize="@dimen/edittext_value" />
</LinearLayout>

edittext_background

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/input_field_grey" />
    <corners android:radius="6dp" />
</shape>

结果如下:

enter image description here

当值文本占用的空间超出了空间时,它就像预期的那样工作,只需按下这样的类型文本:

enter image description here

但是如果值文本太宽,则会忽略类型和值文本省略号,并且整个文本只会附加到右侧,如下所示:

enter image description here

我的目标是值文本占用所有空间并使用省略号限制文本,如下所示:

enter image description here

有人有更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

尝试在textview中删除权重并将其宽度设置为wrap_content

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="20dp"
android:background="#60000000"
android:orientation="horizontal"
android:padding="10dp">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@null"
    android:ellipsize="end"
    android:singleLine="true"
    android:text="Make of car"
    android:textColor="@android:color/black"
    android:textSize="19dp"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@null"
    android:ellipsize="end"
    android:gravity="center_vertical|end"
    android:maxLines="1"
    android:text="Ford Focus 2.0 Gold edition with huge amount getting sort out"
    android:textColor="@android:color/black"
    android:textSize="17sp"/>
</LinearLayout>

如果这不是您想要的,请尝试分别使用relativelayout和alignParentLeft以及alignParentRight作为左右文本视图。 android:layout_toLeftOf属性可防止文本重叠:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="20dp"
android:background="#60000000"
android:padding="10dp">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_toLeftOf="@+id/right_value"
    android:background="@null"
    android:ellipsize="end"
    android:maxLines="1"
    android:text="Make of car"
    android:textColor="@android:color/black"
    android:textSize="19sp"/>

<TextView
    android:id="@+id/right_value"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:ellipsize="end"
    android:gravity="center_vertical|end"
    android:maxLines="1"
    android:text="Ford Focus 2.0 Gold edition with huge amount getting sort out"
    android:textColor="@android:color/black"
    android:textSize="17sp"/>
</RelativeLayout>

答案 1 :(得分:0)

您正在使用LinearLayout所以只需使用重量:)将福克斯2.0金色版本的重量加1,确保无论屏幕大小和屏幕尺寸如何,它都会全部显示其他TextView将只占用剩余空间:)

<LinearLayout 
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_marginLeft="20dp"
  android:layout_marginRight="20dp"
  android:layout_marginTop="20dp"
  android:background="@drawable/edittext_background"
  android:orientation="horizontal"
  android:padding="10dp">
    <TextView
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:background="@null"
      android:ellipsize="end"
      android:singleLine="true"
      android:text="Make of car"
      android:textColor="@android:color/black"
      android:textSize="19dp"/>

    <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:background="@null"
      android:gravity="center_vertical|end"
      android:singleLine="true"
      android:text="Ford Focus 2.0 Gold edition with ..."
      android:ellipsize="end"
      android:textColor="@android:color/black"
      android:textSize="@dimen/edittext_value" 
      android:layout_weight ="1"/>
</LinearLayout>