Android中的xml属性singleLine是否被弃用?

singleLine被用在TextViewEditText xml布局文件中,如下所示:

 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" /> 

有些人说, singleLine是不推荐的,而其他人仍然build议使用它。 有时甚至似乎有必要使用maxLines="1"不起作用。 (见这里 , 在 这里 )

文档应该是回答这个问题的地方,对吗? 他们在这里说:

此常数在API级别3中已弃用。

此属性已被弃用。 使用maxLines来改变静态文本的布局,并使用inputType属性中的textMultiLine标志代替可编辑的文本视图(如果提供了singleLine和inputType,则inputType标志将覆盖singleLine的值)。

但是, 在TextView文档中 ,没有任何迹象表明它已被弃用,无论是android:singleLine还是setSingleLine还是setTransformationMethod 。 相比之下,相同的TextView文档会声明不推荐使用STATUS_BAR_HIDDENfitSystemWindows等其他types的东西。 那么singleLine贬低是singleLine一个遗漏,是“不赞成”,还是什么?

这个问题以前曾被问过,但不是问题的主要焦点(而且没有回答)。

我想你的问题的答案已经在你链接到的SO 职位之一。 不幸的是, singleLines不是黑白的事情。

弃用,但它不会很快到任何地方。

由于其performance较差,相对于其后继者maxLines而言, 它已经被弃用了。 它使用SingleLineTransformationMethod来replace在TextView放置的string中的换行符和回车符,而不像maxLines ,它只是根据行数调整TextView的高度,并且不replacestring。

这种replace字符的方法也意味着singleLine可能以意想不到的方式破解 (例如,如果使用自定义字体)。 正是这些performance和可靠性问题导致了它的贬低。

然而, 它并没有去任何地方,因为作为链接到状态的SOpost,它仍然被许多旧的Android应用程序使用, 并且它有时还是有用的(例如,当你想在一行上显示整个文本而忽略回车和换行)。

请注意,弃用并不一定意味着API正在消失。 这只是意味着它的使用是不鼓励的,但可能被允许。

已弃用的属性被添加到更改d24b8183b9中 ,这不过是Google内部SCM的转储:

从//branches/cupcake/…130745自动导入

从更改core/res/res/values/attrs.xml可以看出diff增加了@deprecated doc注释,但是core/java/android/widget/TextView.java diff不会改变setSingleLine()的文档评论。

现在,如果不能访问Google内部的SCM历史logging,就不可能知道attrs.xml文档注释中的上述变化是attrs.xml ,但对于您的问题

那么singleLine贬低是singleLine一个遗漏,是“不赞成”,还是什么?

一个可能的答案是: TextView的单行既不被弃用,也不被“不推荐”,但增强了考虑到视图是可编辑的,密码字段还是使用任何其他影响单/多行的inputtypes标志, lineness。

TextView (v5.1.0 r1)的官方grepcode中:

android:singleLine没有用@Deprecated注解。

我也看到这在setInputType方法:

 boolean singleLine = !isMultilineInputType(type); // We need to update the single line mode if it has changed or we // were previously in password mode. if (mSingleLine != singleLine || forceUpdate) { // Change single line mode, but only change the transformation if // we are not in password mode. applySingleLine(singleLine, !isPassword, true); } 

setInputType重写mSingleLine值。

编辑:这个XML属性现在正式弃用。 ( 自API 3?以来 )。 现在在AndroidStudio xml编辑器中可见。

singleLine已被弃用。 不需要讨论。

唯一的问题是错误的文档。
“使用inputType属性中的textMultiLine标志代替可编辑的文本视图”与您希望通过使用singleLine实现的内容直接相反。

而不是你可以使用android:inputType="text"
对我来说,它确实做了我想要的 – 一行没有换行符的编辑。

只是想我会添加Android Studio 2.2.1标志singleLine作为弃用。 但是,我发现在我的例子中:

 android:singleLine="false" 

运作良好,而

 android:maxLines="2" 

才不是。

虽然Android Studio宣称它已被弃用,但实际上我们有一个编辑文本,应该让它自己只能是单行的。

添加maxLines="1"使得它允许换行符,这不适合我们的需要。

所以我们回到使用singleLine="true"

我刚刚添加了android:inputType="text"并删除了android:maxLines="1" ,它对我来说工作得很好。

只是为了给讨论添加更多的信息,林特现在有以下错误:

ellipsizemaxLines=1可能会导致某些设备崩溃。早期版本的lintbuild议用maxLines=1replacesingleLine=true ,但在使用ellipsize时不应该这样做。

更多信息: https : //issuetracker.google.com/issues/36950033 “

所以,我想现在是singleLine ,我想我们应该提出一个新的术语……“deprecatedish”?

简单的替代方法,使用: android:maxLines="1"