Search code examples
androidviewtextviewspecial-characters

Why character / cuts the text in TextView if maxLines = 1?


WHAT I HAVE

I have a TextView who is showing a URL with "https://" prefix:

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="test2"
            android:maxLines="1"
            android:ellipsize="marquee"
            android:textStyle="bold"
            android:textSize="16sp"
            android:textColor="@color/primary_text"
            android:id="@+id/txvNomEntornIversio" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="https://test2.sdasasdasdfasdfasdffasdfasdfasdf.sdffd"
            android:ellipsize="end"
            android:maxLines="1"
            android:paddingLeft="10dp"
            android:textSize="13sp"
            android:textStyle="italic"
            android:id="@+id/txvUrlEntorn"/>
        
    </LinearLayout>

WHAT IS THE PROBLEM?

The result in android studio preview and in device after execute the code was:

If execute previous code: enter image description here

If I remove the "/" symbols: enter image description here

If I move the symbol in other position: enter image description here



WHAT I NEED

I need to show the prefix "https: //" with maximum letters to fit the available space.

WHAT I TRIED

I tried to read documentation (setEllipsize block) and search in stackoverflow, searching for some reference with this symbol and nothing found. I tried also to scape the symbols with no effect.

Anyone know why it occurs and can help me? Thanks in advance!

UPDATED LAYOUT

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="15dp"
    android:paddingBottom="15dp"
    android:layout_height="wrap_content">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="center"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="@string/icon_unchecked"
        android:layout_marginRight="10dp"
        android:id="@+id/txvIconChecked"/>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="test2"
            android:maxLines="1"
            android:ellipsize="marquee"
            android:textStyle="bold"
            android:textSize="16sp"
            android:textColor="@color/primary_text"
            android:id="@+id/txvNomEntornIversio" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="https://mydomain.asdfasdasdfasdfasdffasdfasdfasdf.cat"
            android:ellipsize="end"
            android:maxLines="1"
            android:paddingLeft="10dp"
            android:textSize="13sp"
            android:textStyle="italic"
            android:id="@+id/txvUrlEntorn"/>

    </LinearLayout>

</LinearLayout>

enter image description here

enter image description here

UPDATE 2

Thanks to Teiky, we have found that this problem occurs only in versions lower than API 23. It may be a bug?

The option (deprecated) Android: SingleLine = "true" seems to work correctly in all versions! Instead, the new option android: MaxLines with android: ellipsize only works for 23 ...

At the moment, the most viable option seems to ignore deprecated SingleLine ...

SOLUTION FOR ME

Finally, as I said in the last update, my solution was to continue using android: SingleLine = true even if it is marked as deprecated.

Teikyo seconds, he tried a dipsositiu android 4.4.4 and worked well using MaxLines ellipsize ... and me, a device Lollipop I still cut the text to find the symbol / ...

Set in response Teikyo as good as it helped me to investigate the problem further. Thank you all for your help!


Solution

  • I tried your code and the URL is fully display. Maybe you should check these parameters, if you have enough width to display the complete URL:

    android:layout_width="0dp"
    android:layout_weight="1"
    

    UPDATE by xikitidistant:

    The solution isn't the weight and width="0dp". This was a code improve. The solution for me is updated in the question. Thanks for your help.