I'm using the following XML attributes for my EditText:
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:hint="#string/edit_message"
android:lines="1"
android:maxLines="1"
android:scrollHorizontally="true"
android:typeface="serif"
Currently, when the text of my EditText becomes longer than it's size, the cursor moves to the beginning, and all of the previous text is backed up out of sight.
When the text of my EditText becomes longer than it's size, a new line begins, and the height of the EditText stays the same.
I want my EditText to scroll similar to the Google search bar; once the text becomes too long, the cursor should remain at the end, and as further characters are typed, the previous text should move backwards only one character at a time.
Here's a video displaying my problem.
Have you looked at the Ellipsize attribute, this solved a similar issue for us. TextViews also have the attribute android:singleLine="true" which is most likely to be what you are missing
Related
So I have my textview's height set to wrap content. It displays a sports score in the format
"CHI 99 CHA 88". I have the textview match the parent for its width. I also have the score text set to a specific textsize in "sp" units.
So on smaller phones, if there are more characters in the score, or if font size (accessibility settings) is changed, there is a chance that the text will need to wrap into 2 lines. However, I would like a way to control where (in the string) it will decide to wrap the text and make a new line. It would look best in the form
"CHI 99\nCHA 88". But I prefer the text to be on the same line unless it is forced to wrap by screen size, character count, or accessibility settings, so I don't want to hardcode in a "\n" from the beginning.
So basically, is there a way to control what character the text decides to create a new line at if there is a necessity for the text to wrap onto a new line.
Thanks for any responses!
Instead of programatically calculating display sizes/characters, etc., Flow widget with two TextViews can be used control this.
An example layout:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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="match_parent">
<androidx.constraintlayout.helper.widget.Flow
android:layout_width="0dp"
android:layout_height="wrap_content"
app:constraint_referenced_ids="text1,text2"
app:flow_horizontalBias="0"
app:flow_horizontalGap="5dp"
app:flow_horizontalStyle="packed"
app:flow_wrapMode="chain"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="#+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CHI 99" />
<TextView
android:id="#+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CHA 88" />
</androidx.constraintlayout.widget.ConstraintLayout>
Normally, with default sizing, it looks like this:
If the views cannot fit horizontally, second TextView moves to the next line:
you can avoid line breaks by use autosize and set maxLines to 1 like this:
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
android:autoSizeTextType="uniform"
android:autoSizeMinTextSize="12sp"
android:autoSizeMaxTextSize="100sp"
android:autoSizeStepGranularity="2sp"
android:maxLines="1" />
Source: https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview
You can calculate characters in one line according to screen width and add new line character after that.
I've made a TextInputEditText for a PasswordField with a DrawableLeft as an icon, and then i added a PasswordToggleEnabled(true) .. this operation has deleted or hiden my DrawableLeft, Here's my code:
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:passwordToggleContentDescription="Show Password"
app:passwordToggleEnabled="true"
app:hintEnabled="false"
android:id="#+id/signupPasswordlayout"
app:passwordToggleTint="#color/edittexttint">
<android.support.design.widget.TextInputEditText
android:hint="Password"
android:id="#+id/signupPassword"
android:drawableLeft="#drawable/ic_password"
android:drawablePadding="10dp"
android:inputType="textPassword"
android:drawableTint="#color/edittexttint"
android:textSize="15sp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.TextInputLayout>
so , is it possible to show both ( PasswordToggle and DrawableLeft ? ) thank you!
I'd not seen this exact behavior before, but looking at the source for TextInputLayout, it does attempt to preserve the user-set drawables when it applies the placeholder drawable for the password toggle. However, like most everything else in the support libraries to which its applicable, it handles them with relative positions - i.e., start and end - rather than absolute - left and right.
The support libraries have always been notorious for breaking anything that specifies absolute directions or positions, so it's no surprise that that's the issue here, as well.
Simply change the attribute you're setting to drawableStart, instead of drawableLeft. Keep this in mind, too, for anything else involving a choice of absolute or relative positions and directions with the support libraries.
I have a Multiline Edittext of fixed height, 30dp. I need to show only a single line at once. But when user enters multiple lines and scrolls up, user can see some part of the next line (as shown in image 2). It should not happen. I need only one line with the top and bottom spacing like in image 1 without removing the multiline feature.
<EditText
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="50dp"
android:background="#ffffff"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:maxLines="1"
android:inputType="textMultiLine|textNoSuggestions"/>
This [almost] appears okay to me:
<EditText
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="50dp"
android:background="#ffffff"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:maxLines="1"
android:gravity="bottom"
android:inputType="textMultiLine|textNoSuggestions"/>
If you want to allow user to see only last line of text, you can do following:
use single line input
if user enters "\n", store current text somewhere, and clear text in input
You should be able to do it e.g. with InputFilter or
onKeyDown()
I want to disallow the user from being able to expand the the text field as shown in the image. It should look like the Password field however both will allow the following to happen with space bar or the return key.
Text field expansion
Set your all padding to something like 2dp then set maxLines to something that wont overlap the text. Maybe 2 or if you only care for 1 line, then set singleLine=true.
Your XML for that TextView can look something like so:
<TextView
android:layout_width="fill_parent"
android:layout_height="200dp"
android:text="Hello World"
android:id="#+id/txtSomeIdForTextView"
android:layout_alignParentTop="true"
android:layout_alignParentStart="false"
android:padding="2dp"
android:textSize="16dp" />
Take a look at this article to get started with UI, old but still good:
https://mobiforge.com/design-development/understanding-user-interface-android-part-1-layouts
I want to limit the amount of space a TextView can take in the screen with the following rules:
If the text is short (lets say 140 characters or 2 lines) let it take as much room as it need but no more.
If the text is long, i.e. a paragraph, limit the max height of the view (with some kind of maxHeight or with a maximum number of lines)
Here go some screenshots explaining valid and invalid results:
Short Text:
Medium Text:
Internal Scroll:
Blank spaces:
Excessive length:
Try like this.
XML
<TextView
android:id="#+id/descTxtView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="5"
android:scrollbars="vertical"
android:text="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s."
android:textColor="#232e3b"
android:typeface="sans" />
in JAVA
descTxtView= (TextView) findViewById(R.id.descTxtView);
descTxtView.setMovementMethod(new ScrollingMovementMethod());
It's easy if you want to limit TextView's height by line, use android:maxLines:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="5"
android:scrollbars="vertical"
android:requiresFadingEdge="vertical" />
In your code, write as below:
yourTextView.setMovementMethod(new ScrollingMovementMethod());
With this code, your TextView can be scrolled vertically when the text is longer than the maxLines.