在Android中,xml属性singleLine是否已经被弃用?
在Android中,xml属性singleLine是否已经被弃用?
singleLine
在 XML 布局文件中用于 TextView
和 EditText
,示例如下:
一些人在 Stack Overflow 上表示 singleLine
已经过时,而其他人仍建议使用它。有时候甚至在 maxLines="1"
不起作用时也似乎需要使用它(参见 这里,这里,以及这里)。
文档应该是回答这个问题的地方,对吗?在这里,它们说:
此常量已在 API 级别 3 中过时。
此属性已经过时。使用
maxLines
来改变静态文本的布局,使用textMultiLine
标志在 inputType 属性中来处理可编辑文本视图(如果同时提供 singleLine 和 inputType,则 inputType 标志将覆盖 singleLine 的值)。
然而,在TextView 文档中,并没有指示 android:singleLine
、setSingleLine
或 setTransformationMethod
已经过时。相比之下,这些 TextView 文档确实指出了其他一些东西,如 STATUS_BAR_HIDDEN
和 fitSystemWindows
已过时。那么,singleLine
的过时是一个遗漏,还是被"取消过时"了,或者其他什么情况呢?
此问题之前已经被提问过,但并不是问题的主要焦点(也没有得到答案)。
在Android中,是否将xml属性singleLine废弃了?这个问题的出现是因为singleLine属性在性能和可靠性方面存在问题,相对于其替代者maxLines而言。singleLine属性使用SingleLineTransformationMethod来替换TextView中的换行符和回车符,而maxLines属性仅根据行数调整TextView的高度,不进行字符替换。这种替换字符的方法可能导致singleLine属性在某些情况下出现意外的错误(例如使用自定义字体)。因此,singleLine属性被废弃了。然而,由于许多旧的Android应用程序仍在使用singleLine属性,并且有时它仍然是有用的(例如当您想要在一行上显示整个文本并忽略换行符和回车符时),所以它并不会被完全移除。虽然废弃不一定意味着API将被移除,但它的使用被不鼓励,但可能仍然被允许使用。关于singleLine属性的废弃,可能是Android文档中的一个疏忽,因为它在Android的早期开发阶段就已经被废弃了,但并不是所有文档都进行了更新。至于为什么文档推荐使用maxLines属性,可能是因为它提供的行为与singleLine属性不同。
在Android中,属性singleLine是否被弃用了? 这个问题的出现的原因是因为在使用属性ellipsize和maxLines=1时可能会导致某些设备崩溃。之前的Lint版本建议将singleLine=true替换为maxLines=1,但在使用ellipsize时不应该这样做。现在,我认为singleLine已经被弃用了,我们应该想出一个新术语..."deprecatedish"? 这条评论已经四年了。四年前,这是"deprecatedish"和不清楚的,现在它仍然是。这真是疯狂。
解决方法:
根据上述问题,我们应该避免在使用属性ellipsize时将singleLine设置为true。相反,我们应该使用maxLines=1来限制文本的行数,并在需要时使用ellipsize属性来指定文本截断的方式。这样可以避免在某些设备上崩溃的问题。
代码示例:
通过将maxLines设置为1,我们限制了TextView只显示一行文本。而通过使用ellipsize属性,我们可以指定文本截断的方式,例如在末尾加上省略号。
在Android中,属性singleLine被认为是已弃用的。在使用属性ellipsize时,应避免将singleLine设置为true。相反,应该使用maxLines=1来限制文本的行数,并在需要时使用ellipsize属性来指定文本截断的方式。这样可以避免在某些设备上崩溃的问题。