singleLine
is/was used in xml layout files for TextView
and EditText
something like the following:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true" />
Some people on SO say singleLine
is deprecated, while other people still suggest using it. Sometimes it even seems necessary to use when maxLines="1"
doesn't work. (see here, here, and here)
The docs should be the place to go to answer this question, right? Here, they say:
This constant was deprecated in API level 3.
This attribute is deprecated. Use
maxLines
instead to change the layout of a static text, and use thetextMultiLine
flag in the inputType attribute instead for editable text views (if both singleLine and inputType are supplied, the inputType flags will override the value of singleLine).
However, in the TextView docs, there is no indication that it is deprecated, either for android:singleLine
or for setSingleLine
or for setTransformationMethod
. The same TextView docs, by comparison, do state that other things like STATUS_BAR_HIDDEN
and fitSystemWindows
are deprecated. So is the singleLine
deprecation an omission, was it "undeprecated", or what?
This question has been previously asked before but was not the main focus of the question (and was not answered).
I have just added
android:inputType="text"
and removedandroid:maxLines="1"
, it worked fine for me.Simple alternate way, use:
android:maxLines="1"
The deprecated attribute was added in change d24b8183b9 which is nothing but a dump from Google's internal SCM:
As can be seen from the change
core/res/res/values/attrs.xml
diff adds the @deprecated doc comment, butcore/java/android/widget/TextView.java
diff does not alter anything fromsetSingleLine()
's doc comment.Now without access to Google's internal SCM history, it is not possible to know what exactly caused above change in
attrs.xml
doc comment, but for your questionone possible answer is:
TextView
's single-line was neither deprecated, nor "undeprecated", but it was enhanced to take into account whether the view is editable, a password field or uses any other input type flag that affects single/multi-lineness.Just thought I'll add that Android Studio 2.2.1 flags singleLine as deprecated. However, what I found is that in my instance:
works well, whereas
does not.
I think the answer to your question is already in one of the SO posts you linked to. Unfortunately, the deprecation of
singleLines
is not a black-or-white matter.It is deprecated, but it is not going anywhere anytime soon.
It was deprecated because its performance is poor, relative to its successor,
maxLines
. It usesSingleLineTransformationMethod
to replace newlines and carriage returns in the String you place in theTextView
, unlikemaxLines
, which "just" adjusts the height of theTextView
based on the number of lines and does no String replacing.This method of replacing characters also meant that
singleLine
could break in unexpected ways (e.g. if you use custom fonts). It was these performance and reliability issues that led to its deprecation.However, it is not going anywhere because, as the SO post you linked to states, it is still in use by many old Android applications, and it is still useful sometimes (e.g. when you want to show the entire text on one line and ignore carriage-returns and newlines).
Do note that deprecation does not necessarily mean that an API is going away. It just means that its use is discouraged, but may be permitted.
singleLine
IS deprecated. No discussion needed.The only problem is the wrong documentation.
"use the
textMultiLine
flag in theinputType
attribute instead for editable text views" is the direct opposite of what you want to achieve by usingsingleLine
.Instead of that you can use
android:inputType="text"
.For me it did exactly what I wanted - an edit with a single line without line breaks.