Replacing ellipsize with text in Android - 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

Related

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.

Android TextView SingleLine field hides long text

I have a TextView which sits on the left side of the screen and is set with gravity="right" and it is set with SingleLine = "true."
If by some chance the text in this view gets too long I want it to simply disappear off the left hand side of the view. I thought the configuration below would do that but what actually happens is the the long string disappears completely, presumably down and outside of the view somewhere.
How can I create a simple text view that contains a single line of text and keeps its layout even when something unexpected happens? ... or even something predictable.
<TextView
android:id="#+id/tempF"
android:text="#string/tempF"
android:layout_width="146dp"
android:layout_height="wrap_content"
android:textColor="#cccccc"
android:textStyle="bold"
android:textSize="92dp"
android:fontFamily="serif"
android:gravity="right"
android:layout_marginTop="60dp"
android:layout_gravity="top|left"
android:singleLine="true"
/>
This is the purpose of "ellipsize" - truncating a portion of text to indicate additional text.
In you case, you may simply need to add something like:
android:ellipsize="end"
or you might need to go deeper:
Automatically ellipsize a string in Java
Or look at this:
android ellipsize multiline textview
The idea behind extending the class is that you can customize the behavior of the TextView when the text content exceeds the space provided. For example, you can give it the appearance the it "bleeds over" by removing padding, etc. An ellipsis is an indicator that is commonly used to explain "there's more text that you can't see" - this is how it would look:
This is really a really long...
(the 3 periods are the ellipsis - your text goes the opposite direction, but it should still work)
With a custom TextView, you could change the "..." to nothing or anything else you want (even an image, which I've done).
You could also marquee the text:
TextView Marquee not working
Add 2 properties in xml
android:singleLine="true"
android:ellipsize="end"
You should play with ellipsize attribute of the TextView.Check below:
<TextView
android:id="#+id/tempF"
android:text="#string/tempF"
android:layout_width="146dp"
android:layout_height="wrap_content"
android:textColor="#cccccc"
android:textStyle="bold"
android:textSize="92dp"
android:fontFamily="serif"
android:gravity="right"
android:layout_marginTop="60dp"
android:layout_gravity="top|left"
android:singleLine="true"
android:ellipsize="end"
/>
<TextView
android:id="#+id/tv_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#color/colorGray"
android:textSize="#dimen/_18dp"
android:padding="#dimen/_2dp"
android:singleLine="true"
android:ellipsize="end"
android:text="#string/desc" />
Since android:singleLine is deprecated. We can use this line android:maxLines
Can do like this.
android:ellipsize="end"
android:maxLines="1"
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#000000" />
It works.

How do I wrap a second text around first text title, both are in text view

I am trying to wrap a second text around the first text, both in relative layout and textview such that :
<RelativeLayout
android:id="#+id/headlineRelativeLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="#+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="2dp"
android:paddingRight="2dp"
foo:customFont="proxima-nova-bold.ttf"
android:textColor="#color/orange"
android:textSize="#dimen/title"
android:gravity="left"
/>
<TextView
android:id="#+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:paddingLeft="2dp"
android:paddingRight="2dp"
android:layout_toRightOf="#id/text1"
foo:customFont="proxima-nova-regular.ttf"
android:textColor="#color/green"
android:textSize="#dimen/title"
android:gravity="left"
/>
</RelativeLayout>
So, what I am currently getting is :
TEXT1 (TEXT 2 STUFF IS A SENTENCE WHICH
SHOULD WRAP AROUND)
bUT WHAT i expect is :
TEXT1 (TEXT 2 STUFF IS A SENTENCE WHICH
WHICH SHOULD WRAP AROUND)
Any clue?
I may have missed something here, but what you re getting is what I would expect. Each TextView is a rectangular box into which the text is rendered. If you want, you can overlay the boxes, but then the 'TEXT 1' and 'TEXT 2' would lie on top of each other.
To achieve what you want, you will have to think more carefully about what you are doing, and perhaps have three TextViewss:
<TextView 1><TextView 2>
<..... TextView 3 .....>
Whenever you set the text in TextView 2, set it to only show one line and find out how far it got. Then send the rest of the string to TextView 3.

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>

Android Textview Italic and wrap_contents

I am using 3 italic textviews with different colors
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:orientation="horizontal" android:id="#+id/submittedBy" android:paddingTop="10dip">
<ImageView android:id="#+id/subByImg"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:gravity="left" android:layout_gravity="bottom" android:src="#drawable/submitted_by_arrow"/>
<TextView android:id="#+id/submitLabel"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:gravity="left" android:text="Submitted by" android:textStyle="italic"
android:textSize="12sp" android:textColor="#color/gray" android:paddingLeft="5dip"/>
<TextView android:id="#+id/submitName" android:textStyle="italic"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:textSize="12sp" android:textColor="#color/maroon_dark" android:paddingLeft="10dip"/>
<TextView android:id="#+id/submitByDate" android:textStyle="italic"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:gravity="left"
android:textSize="12sp" android:textColor="#color/gray" android:paddingLeft="10dip"/>
</LinearLayout>
I wonder every last character is not displaying properly specially name displayed in the middle is "Dan Buckland" and it it is missing last character looks like "Dan Bucklano"
Also tell me pls how can have textview italic and bold both..
alt text http://www.freeimagehosting.net/uploads/953d573113.jpg
I had the exact same problem. I got around it by simply adding a space to the end of any string that needs to be in italics.
It may not be the most long-term-correct solution but it worked for me.
Seems like the bounding box is not correctly calculated when using italic.
Have you tried to use paddingLeft=6 and paddingRight=6 for the elements?
(less chance of overlap).
For multiple styles in a TextView see Is it possible to have multiple styles inside a TextView?
You can use   with the text in string.xml file.

Categories

Resources