Android: TextView ellipsize multiline [duplicate] - android

This question already has answers here:
android ellipsize multiline textview
(23 answers)
Closed 9 years ago.
How can I make a multiline TextView that truncates the text properly? My TextView is part of a TableRow, so its width is a weight. The following does not work. The result is simply truncated text without the ellipses. I'm using API 10 (Android 2.3.3).
<TextView
android:id="#+id/name_recipe"
android:layout_centerHorizontal="true"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="8"
android:text="Fried pork with mushrooms and potatoes and cilantro"
android:ellipsize="end"
android:maxLines="2"
android:paddingLeft="10dp" />
Reducing the two lines to a single line with the following does work, but it's not ideal:
android:singleLine="true"
I don't like this for two reasons:
android:singleLine is deprecated
I'd much prefer to have the text be on two lines than one.
I've seen discussion about this like from here but I'm hoping a new solution has been found by now.

Try this, it's from my project and works on phone but unfortunately not on tablet emulator:
<TextView
android:id="#+id/myItem"
android:layout_gravity="bottom|center_vertical"
android:textSize="10sp"
android:maxLines="2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:ellipsize="end"
android:lines="2" />

Use lines="1" as all the other methods are deprecated. As well as set scrollHorizontally.
<TextView
android:id="#+id/myid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:lines="1"
android:scrollHorizontally="true"
android:ellipsize="end"
android:layout_weight="1"
/>

Related

How to ingore "Text size is too small" [duplicate]

This question already has answers here:
Why android gives warning on using size smaller than 12sp?
(2 answers)
Closed 4 years ago.
How can I ignore the "Text size is too small" warning in Android Studio?
For example, in one of my TextViews:
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="3"
android:singleLine="false"
android:text="#string/navtask_btn_arrived"
android:textAlignment="center"
android:textSize="8sp"
tools:ignore="textSize"/>
I tried to add:
tools:ignore="textSize"
tools:ignore="TextSize"
tools:ignore="SpUsage"
tools:ignore="spUsage"
tools:ignore="dimen"
It is supposed to work with "textSize", as the documentation mentions it can be used with any attribute.
I know some of these do not make any sense, but hey, why not try them out before asking here?
Any ideas?
You need to add attribute tools:ignore="SmallSp" to remove the warning use SmallSp where SmallSp mean small scalable pixels as
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="3"
android:singleLine="false"
android:text="#string/navtask_btn_arrived"
android:textAlignment="center"
android:textSize="8sp"
tools:ignore="SmallSp"/>
Android Studio gives error:
Avoid using sizes smaller then 12sp.So try to avoid using below 12sp size.
If you still want to use then declare below the line.
tools:ignore="SmallSp"
Minimum text size is 12sp in android
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="3"
android:singleLine="false"
android:text="#string/navtask_btn_arrived"
android:textAlignment="center"
android:textSize="12sp"
tools:ignore="textSize"/>

Why can't I show the excess characters entered in a textview?

I want the textview to show excess characters entered and push the old ones left as in any standard calculator app where the latest character entered is visible. The maxLength = 14. When characters are typed (once 14 characters are entered as in the image) then it doesn't show them at all. I think I am doing something wrong but can't figure it out what. I have read other answers on stackoverflow for some similar errors and tried the solutions but it didn't work.
Thanks :)
Here's the xml Code for the textview:
`
<TextView
android:id="#+id/full_expression"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:layout_weight="1"
android:alpha="0.85"
android:background="#android:color/transparent"
android:elevation="6dp"
android:fontFamily="sans-serif"
android:gravity="bottom|end"
android:maxLength="14"
android:maxLines="1"
android:paddingEnd="10dp"
android:scrollHorizontally="true"
android:text="0"
android:textColor="#android:color/background_light"
android:textSize="34sp" />
Use "android:gravity" property to align your text inside textview.

Replacing ellipsize with text in Android

I'm trying to add "Read more" to a the end of a textView if the text is more than two lines long, but I'm having a hard time doing so. My TextView looks like the following:
<TextView
android:id="#+id/reviewText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:layout_marginLeft="1dp"
android:text=""
android:maxLines="2"
android:ems="3"
android:ellipsize="end"
android:textColor="#FFFFFF" />
So to clarify, right now I get three dots because of the ellipsize but I really want it to write "Read more".
Incidentally, my software is supporting API level 14+.
Try to add following two lines:
abdroid:focusable="true"
android:focusableInTouchMode="true"
to your TextView

Getting TextView to wrap

I know this question has been asked a number of times but I still can't seem to get this to work.
I have tried all sorts of combinations and it just refuses to wrap to 2 lines.
This is what it is now:
<TextView
android:id="#+id/doctor_details_clinic_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingRight="3dip"
android:textSize="12sp"
android:maxLines="1"
android:layout_gravity="right"
android:gravity="right"
android:scrollHorizontally="false"
android:singleLine="false"
android:ellipsize="none"
/>
I've tried make the width 0dip and all other things suggested but to no accord.
First of all you should set Max lines to 2 instead of 1.
Something like this will work:
<TextView
android:id="#+id/myText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:maxLines="2"
android:ellipsize="end"
android:text="this is the most interesting use of text view I have seen so far,this is the most interesting use of text view I have ever seen so far,this is the most interesting use of text view I have ever seen so far this is the most interesting use of text view I have ever seen so far"/>

Android, How to limit width of TextView (and add three dots at the end of text)?

I have a TextView that I want to limit characters of it. Actually, I can do this but the thing that I'm looking for is how to add three dots (...) at the end of string. This one shows the text has continue. This is my XML but there is no dots although it limit my text.
<TextView
android:id = "#+id/tvFixture"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_toLeftOf = "#id/ivFixture_Guest"
android:text = "#string/test_06"
android:lines = "1"
android:ems = "3"
android:gravity = "right"
style = "#style/simpletopic.black"
android:ellipsize="end"/>
Deprecated:
Add one more property android:singleLine="true" in your Textview
Updated:
android:ellipsize="end"
android:maxLines="1"
The following is what I learned by playing around with various options for forcing a TextView to a single line (with and without the three dots).
android:maxLines="1"
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:text="one two three four five six seven eight nine ten" />
This just forces the text to one line. Any extra text is hidden.
Related:
android:maxLines
android:singleLine (Note this and this)
android:lines
ellipsize="end"
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:ellipsize="end"
android:text="one two three four five six seven eight nine ten" />
This cuts off the text that doesn't fit but lets users know that the text has been truncated by adding an ellipsis (the three dots).
Related:
ellipsize="start" (...aaabbbccc)
ellipsize="middle" (aaa...ccc)
android: Ellipsise , meaning of the options
ellipsize="marquee"
<TextView
android:id="#+id/MarqueeText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="one two three four five six seven eight nine ten" />
This makes the text scroll automatically across the TextView. Note that sometimes it needs to be set in code:
textView.setSelected(true);
Supposedly android:maxLines="1" and android:singleLine="true" should do basically the same thing and since singleLine is apparently deprecated I would prefer not to use it, but when I take it out, the marquee doesn't scroll anymore. Taking maxLines out doesn't affect it, though.
Related:
Marquee text in Android
HorizontalScrollView with scrollHorizontally
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="#+id/horizontalScrollView">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:scrollHorizontally="true"
android:text="one two three four five six seven eight nine ten" />
</HorizontalScrollView>
This allows the user to manually scroll to see the whole line of text.
Try this property of TextView in your layout file..
android:ellipsize="end"
android:maxLines="1"
I take it you want to limit width to one line and not limit it by character? Since singleLine is deprecated, you could try using the following together:
android:maxLines="1"
android:scrollHorizontally="true"
android:ellipsize="end"
eg. you can use
android:maxLength="13"
this will restrict texview length to 13 but problem is if you try to add 3 dots(...), it wont display it, as it will be part of textview length.
String userName;
if (data.length() >= 13) {
userName = data.substring(0, 13)+ "...";
} else {
userName = data;
}
textView.setText(userName);
apart from this you have to use
android:maxLines="1"
Use
android:singleLine="true"
android:maxLines="1"
app:layout_constrainedWidth="true"
It's how my full TextView looks:
<TextView
android:id="#+id/message_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:maxLines="1"
android:singleLine="true"
android:text="NAME PLACEHOLDER MORE Text"
android:textColor="#android:color/black"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constrainedWidth="true"
app:layout_constraintEnd_toStartOf="#id/message_check_sign"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toEndOf="#id/img_chat_contact"
app:layout_constraintTop_toTopOf="#id/img_chat_contact" />
I am using Horizonal Recyclerview.
1) Here in CardView, TextView gets distorted vertically when using
android:ellipsize="end"
android:maxLines="1"
Check the bold TextViews Wyman Group, Jaskolski...
2) But when I used singleLine along with ellipsize -
android:ellipsize="end"
android:singleLine="true"
Check the bold TextViews Wyman Group, Jaskolski...
2nd solution worked for me properly (using singleLine). Also I have tested in OS version: 4.1 and above (till 8.0), it's working fine without any crashes.
Steps to add '...' at end of the text if it is too long:
check that the text width is constant
add these two lines
android:ellipsize="end" android:maxLines="1"
Complete code of textview in constraint layout:
<TextView
android:layout_width="75dp"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textSize="15sp"
android:textAllCaps="false"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent" />
code:
TextView your_text_view = (TextView) findViewById(R.id.your_id_textview);
your_text_view.setEllipsize(TextUtils.TruncateAt.END);
xml:
android:maxLines = "5"
e.g.
In Matthew 13, the disciples asked Jesus why He spoke to the crowds in parables. He answered, "It has been given to you to know the mysteries of the kingdom of heaven, but to them it has not been given.
Output:
In Matthew 13, the disciples asked Jesus why He spoke to the crowds in parables. He answered, "It has been given to you to know...
I got the desired result by using
android:maxLines="2"
android:minLines="2"
android:ellipsize="end"
The trick is set maxLines and minLines to the same value... and Not just android:lines = "2", dosen't do the trick.
Also you are avoiding any deprecated attributes.
You can limit your textview's number of characters and add (...) after the text.
Suppose You need to show 5 letters only and thereafter you need to show (...), Just do the following :
String YourString = "abcdefghijk";
if(YourString.length()>5){
YourString = YourString.substring(0,4)+"...";
your_text_view.setText(YourString);
}else{
your_text_view.setText(YourString); //Dont do any change
}
a little hack ^_^. Though its not a good solution. But a work around which worked for me :D
EDIT:
I have added check for less character as per your limited no. of characters.
You need to add following lines into your layout for the textview
android:maxLines="1"
android:ellipsize="end"
android:singleLine="true"
Hope this works for you.
In order to work with the android:ellipsize attribute, you have to limit the layout width of the TextView, such that the text is out of bounds from view of TextView.
So, android:layout_width attribute plays a key role here, set it accordingly.
One example can be:
<TextView
android:layout_width="120dp"
android:layout_height="wrap_content"
android:ellipsize="end"
android:text="This is a very long text to be displayed"
android:textSize="12sp"
android:maxLines="1"
/>
Now, here if the text in android:text="This is a very long text to be displayed" goes out of view from TextView with a android:layout_width="120dp", android:ellipsize="end" will truncate the text and place ...(3 dots) after it. i.e. This is very long... will be displayed in the TextView.
<TextView
android:id="#+id/product_description"
android:layout_width="165dp"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:text="Pack of 4 summer printed pajama"
android:textColor="#d2131c"
android:textSize="12sp"
android:maxLines="2"
android:ellipsize="end"/>
I think you give fix height and width of text view. Then your solution will work.
you can write this line in xml where you take the textview :
android:singleLine="true"
The approach of #AzharShaikh works fine.
android:ellipsize="end"
android:maxLines="1"
But I realize a trouble that TextView will be truncated by word (in default). Show if we have a text like:
test long_line_without_any_space_abcdefgh
the TextView will display:
test...
And I found solution to handle this trouble, replace spaces with the unicode no-break space character, it makes TextView wrap on characters instead of words:
yourString.replace(" ", "\u00A0");
The result:
test long_line_without_any_space_abc...
Apart from
android:ellipsize="end"
android:maxLines="1"
you should set
android:layout_width="0dp"
also know as "match constraint", because the wrap_content value just expands the box to fit the whole text, and the ellipsize property can't make its effect.
Simple for three dots
android:layout_width="100dp" <!--your dp or match_parent or 0dp>
android:maxLines="2" <!--count your line>
android:ellipsize="end"
Add These two lines in your text
android:ellipsize="end"
android:singleLine="true"
you can do that by xml:
<TextView
android:id="#+id/textview"
android:maxLines="1" // or any number of lines you want
android:ellipsize="end"
/>
set android:maxLength="8" in Textview
if you want to set yourString >5. then set textview length 5+3 (for three-dot)
if (yourString.length()>5) //
{
textview.setText(yourString.substring(0,5)+"...");
}
else {
textview.setText(title);
}
1.set static width like 7odp
2.use android:ellipsize="end"
3.use android:maxLines="1"
4.use android:singleLine="true"
<TextView
android:id="#+id/tv_status"
**android:layout_width="70dp"**
android:layout_height="wrap_content"
android:layout_marginEnd="#dimen/padding_8"
android:gravity="center|center_horizontal"
android:includeFontPadding="false"
android:textColor="#color/black_2a"
android:textSize="#dimen/text_size_1"
**android:ellipsize="end"
android:maxLines="1"
android:singleLine="true"**
app:layout_constrainedWidth="true"
app:borrowStatusText="#{item.lenders[0].status}"
app:layout_constraintEnd_toStartOf="#id/iv_vector"
app:layout_constraintTop_toTopOf="parent" />
In this way you can set the maximum length of the view and, at the same time, you will have dots at the end ("num" is your number of dp):
android:maxWidth="{num}dp"
android:ellipsize="end"
You just change ...
android:layout_width="wrap_content"
Use this below line
android:layout_width="match_parent"
.......
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_toRightOf="#+id/visitBox"
android:orientation="vertical" >
<TextView
android:id="#+id/txvrequestTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="Abcdefghighiklmnon"
android:textAppearance="?
android:attr/textAppearanceLarge"
android:textColor="#color/orange_color" />
</LinearLayout>

Categories

Resources