singleLine
用于TextView
和EditText
的xml布局文件中,如下所示:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true" />
关于SO的{p> Some people说singleLine
已被弃用,而other people仍然建议使用它。有时甚至在maxLines="1"
不起作用时似乎也需要使用它。 (请参阅here,here和here)
文档应该是回答这个问题的地方,对吧? Here, they say:
此常量已在API级别3中弃用。
此属性是 弃用。请改用
maxLines
来更改静态布局 文本,并在inputType属性中使用textMultiLine
标志 而是可编辑的文本视图(如果singleLine和inputType都是 如果提供,inputType标志将覆盖singleLine的值。
但是,in the TextView docs,没有任何迹象表明它已被弃用,适用于android:singleLine
或setSingleLine
或setTransformationMethod
。相比之下,相同的TextView文档会声明其他内容(例如STATUS_BAR_HIDDEN
和fitSystemWindows
)已弃用。那么singleLine
弃用是否遗漏,它是“未被贬低”,还是什么?
这个问题已经previously asked before但不是问题的主要焦点(并没有得到回答)。
答案 0 :(得分:43)
我认为您的问题的答案已经在SO posts you linked to之一。不幸的是,singleLines
的弃用不是黑白问题。
已弃用,但不很快就会到达任何地方。
它已被弃用,因为相对于其后续版本maxLines
,其性能较差。它使用SingleLineTransformationMethod
替换TextView
中放置的字符串中的换行符和回车符,与maxLines
不同,{&#34;只是&#34;}根据行数调整TextView
的高度,不替换字符串。
这种替换字符的方法也意味着singleLine
可以break in unexpected ways(例如,如果您使用自定义字体)。正是这些性能和可靠性问题导致了它的弃用。
然而,它不会去任何地方,因为,因为您链接到州的SO帖子,它仍然被许多旧的Android应用程序使用,和它仍然有时很有用(例如,当你想在一行上显示整个文本并忽略回车和换行符时)。
请注意,弃用并不一定意味着API正在消失。这只是意味着不鼓励使用它,但可能是允许的。
答案 1 :(得分:19)
已弃用的属性已添加到更改d24b8183b9中,这只是来自Google内部SCM的转储:
从分支机构/ cupcake /...@ 130745
自动导入
从更改中可以看出core/res/res/values/attrs.xml
diff添加了@deprecated doc评论,但core/java/android/widget/TextView.java
diff不会改变setSingleLine()
&#中的任何内容39;博士评论。
现在无法访问Google的内部SCM历史记录,无法知道attrs.xml
doc评论中上述更改的确切原因,但是您的问题
singleLine
弃用是一个遗漏,是不是&#34;不推荐&#34;还是什么?
一个可能的答案是:TextView
的单行既没有被弃用,也没有&#34;未被禁用&#34;,但是它被增强以考虑视图是否可编辑,密码字段或使用影响单/多线性的任何其他输入类型标志。
答案 2 :(得分:9)
在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属性现已正式弃用。 (since API 3?)。它现在在AndroidStudio xml编辑器中可见。
答案 3 :(得分:5)
singleLine
已被弃用。不需要讨论。
唯一的问题是错误的文档。
“使用textMultiLine
属性中的inputType
标志代替可编辑的文本视图”与使用{{1 }}。
而不是你可以使用 singleLine
。
对我而言,它完全符合我的要求 - 使用单行进行编辑,没有换行符。
答案 4 :(得分:4)
我想我会补充说Android Studio 2.2.1将singleLine标记为已弃用。 但是,我发现在我的实例中:
android:singleLine="false"
运作良好,而
android:maxLines="2"
没有。
答案 5 :(得分:4)
虽然Android Studio声称它已被弃用,但实际上我们有一个编辑文本,它应该只允许单行。
添加maxLines="1"
使其允许换行符,这不符合我们的需要。
所以我们回到使用singleLine="true"
。
答案 6 :(得分:4)
只是为了在讨论中添加更多信息,Lint现在出现以下错误:
&#34;合并ellipsize
和maxLines=1
会导致某些设备崩溃。早期版本的lint建议将singleLine=true
替换为maxLines=1
,但在使用ellipsize
时不应该这样做。
更多信息:https://issuetracker.google.com/issues/36950033&#34;
所以,我想现在是singleLine
,我认为我们应该提出一个新术语......&#34;弃用&#34;?
答案 7 :(得分:3)
我刚刚添加了android:inputType="text"
并删除了android:maxLines="1"
,它对我来说很好。
答案 8 :(得分:1)
仅提供android:maxLines="1"
和android:minLines="1"
不会解决键盘actionNext
相关问题。使用android:inputType="text"
即可。
答案 9 :(得分:0)
简单的替代方式,使用:android:maxLines="1"