Android中的xml属性singleLine是否被弃用?
singleLine
被用在TextView
和EditText
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_HIDDEN
和fitSystemWindows
等其他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"
,它对我来说工作得很好。
只是为了给讨论添加更多的信息,林特现在有以下错误:
“ ellipsize
和maxLines=1
可能会导致某些设备崩溃。早期版本的lintbuild议用maxLines=1
replacesingleLine=true
,但在使用ellipsize
时不应该这样做。
更多信息: https : //issuetracker.google.com/issues/36950033 “
所以,我想现在是singleLine
,我想我们应该提出一个新的术语……“deprecatedish”?
简单的替代方法,使用: android:maxLines="1"