带有wrap_content剪切文本行的Android TextView

时间:2017-04-12 01:14:51

标签: android layout

我在Android中创建了一个动态添加了长字符串的片段。行数是可变的。我正在使用LinearLayout来包含图像下方的文本。我希望文本保持图像的宽度并在下面垂直展开。当我在layout_height上为TextView使用wrap_content时,它会在第二行之后剪切文本。我可以设置高度或线属性,并且父LinearLayout可以正确扩展,如何使用xml属性使其具有动态高度?

这是布局代码:

<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ Copyright 2017, University of Colorado Boulder
  -->

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="vertical"
    android:padding="24dp">

    <LinearLayout
        android:id="@+id/image_and_favorite"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingBottom="8dp">

        <ImageView
            android:id="@+id/image"
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:onClick="launchSimulation"
            android:paddingEnd="20dp"
            android:scaleType="fitStart"
            app:srcCompat="@drawable/logo" />
    </LinearLayout>

    <TextView
        android:id="@+id/description"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Super long example text. Super long example text. Super long example text. Super long example text. Super long example text. Super long example text. Super long example text. Super long example text. Super long example text.  " />

</LinearLayout>

结果如下:

enter image description here

以下是我希望它的样子:

enter image description here

2 个答案:

答案 0 :(得分:1)

这可以通过为外部线性布局提供特定宽度来解决。对不起,我没有看到为什么会出现这种情况的好解释,但是在我测试之后它确实有效。

<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ Copyright 2017, University of Colorado Boulder
  -->

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="150dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="vertical"
    android:padding="24dp">

    <LinearLayout
        android:id="@+id/image_and_favorite"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingBottom="8dp">

        <ImageView
            android:id="@+id/image"
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:onClick="launchSimulation"
            android:paddingEnd="20dp"
            android:scaleType="fitStart"
            app:srcCompat="@drawable/logo" />
    </LinearLayout>

    <TextView
        android:id="@+id/description"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Super long example text. Super long example text. Super long example text. Super long example text. Super long example text. Super long example text. Super long example text. Super long example text. Super long example text.  " />

</LinearLayout>

答案 1 :(得分:0)

除了像Stephen建议的那样设置静态宽度,如果文本动态变化,你还需要在post runnable中重置高度。

final TextView descriptionView = (TextView) view.findViewById( R.id.description );
        descriptionView.setText( someLongString );
        descriptionView.post( new Runnable() {
            @Override
            public void run() {
                // ¯\_(ツ)_/¯
                descriptionView.setLines( descriptionView.getLineCount() );
            }
        } );