简体   繁体   中英

Android: strange text wrapping issue with TextView

I have a TextView in a LinearLayout. The textview's XML

<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"

    android:background="@color/CLOUDS"
    android:ellipsize="none"
    android:maxLines="100"
    android:minHeight="20dp"
    android:minLines="1"
    android:layout_margin="0dp"
    android:paddingLeft="4dp"
    android:paddingRight="4dp"
    android:paddingTop="0dp"
    android:textSize="14sp"
    android:paddingBottom="0dp"
    android:layout_weight="10"
    android:layout_height="wrap_content"
    android:layout_width="0dp"
    android:singleLine="false"
    android:scrollHorizontally="false"
    android:inputType="textCapSentences|textMultiLine"
    />

错误1
On the right we see the textview set with text: "Campanario Blanco\\nMistral Ice\\nMistral" The last word is not displayed.

On the left we have another textview with weight 10. Both are placed within a Linear layout.

    LinearLayout linearLayout = new LinearLayout(context.mContext);
    LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    ll.topMargin = 2;
    ll.bottomMargin = 0;
    linearLayout.setOrientation(LinearLayout.HORIZONTAL);
    linearLayout.setLayoutParams(ll);
    linearLayout.setPadding(0, 0, 0, 0);
    bubble.addView(linearLayout);

Now if I change the content of the view to "Campanario Blanco\\nMistral Ice\\nMistral\\nMalibu" Now 'mistral' is visible, but the new last work 'Mailbu' is not.

错误2

As shown the total line count is equal to the sum of the \\n but it doesn't take into account the wrapping of the first string. If we remove the long text, it works as expected. "Mistral Ice\\nMistral\\nMalibu"

没有错误

You can have something like this, use like this

<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginTop="20dp"
     android:layout_marginRight="20dp"
     android:layout_marginLeft="20dp"
     android:padding="6dp"
     android:background="#358576"
     tools:context="com.example.yujcore7.myapplicationtextviewdemo.MainActivity">


<TextView
    android:textColor="#fff"
    android:textSize="20sp"
    android:layout_weight="1"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:text="Marca(s)" />

<TextView
    android:textColor="#fff"
    android:textAllCaps="true"
    android:textSize="16sp"
    android:layout_marginRight="10dp"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:text="Campanario Blanco\nMistral Ice\nMistral\nMalibu" />

use this layout and let me know.

Thanks to @swanand-vaidya I tracked the error down. One of the parent's parent's had a wrap_content set.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/WET_ASPHALT"
android:orientation="vertical">

<TextView
    android:layout_width="270dp"
    android:layout_height="wrap_content" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#0D97FC"
    android:orientation="horizontal">

    <TextView

        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="10"
        android:background="@color/AMETHYST_DARK"
        android:text="line1 hello world hello world hello world hello world \nline2 hello world hello\nline 3hello world\nline4 hello world world"
        android:textSize="14sp" />

</LinearLayout>

The result of this layout is

在此输入图像描述

Line4 is not displayed. As the top-most linear-layout has wrap_conent.

When the top-most layout has a fixed value or match_parent. All lines are correctly displayed.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM