Android中是否弃用了xml属性singleLine?

时间:2015-05-04 11:12:38

标签: android android-edittext attributes textview android-singleline

singleLine用于TextViewEditText的xml布局文件中,如下所示:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:singleLine="true" />
关于SO的{p> Some peoplesingleLine已被弃用,而other people仍然建议使用它。有时甚至在maxLines="1"不起作用时似乎也需要使用它。 (请参阅hereherehere

文档应该是回答这个问题的地方,对吧? Here, they say:

  

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

     

此属性是   弃用。请改用maxLines来更改静态布局   文本,并在inputType属性中使用textMultiLine标志   而是可编辑的文本视图(如果singleLine和inputType都是   如果提供,inputType标志将覆盖singleLine的值。

但是,in the TextView docs,没有任何迹象表明它已被弃用,适用于android:singleLinesetSingleLinesetTransformationMethod。相比之下,相同的TextView文档会声明其他内容(例如STATUS_BAR_HIDDENfitSystemWindows)已弃用。那么singleLine弃用是否遗漏,它是“未被贬低”,还是什么?

这个问题已经previously asked before但不是问题的主要焦点(并没有得到回答)。

10 个答案:

答案 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;合并ellipsizemaxLines=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"