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

Sur*_*gch 63 android attributes textview android-edittext android-singleline

singleLineis /用于xml布局文件中TextView,EditText如下所示:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:singleLine="true" />
Run Code Online (Sandbox Code Playgroud)

SO上的一些人singleLine不赞成,而其他人仍然建议使用它.有时甚至似乎有必要在maxLines="1"不起作用时使用.(见这里,这里这里)

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

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

不推荐使用此属性.maxLines相反,使用更改静态文本的布局,并使用textMultiLineinputType属性中的标志代替可编辑的文本视图(如果提供了singleLine和inputType,则inputType标志将覆盖singleLine的值).

但是,在TextView文档中,没有任何迹象表明它已被弃用,无论是for android:singleLine还是for setSingleLine或for setTransformationMethod.相比之下,相同的TextView文档确实声明了其他类似STATUS_BAR_HIDDENfitSystemWindows不赞成的东西.所以是singleLine弃用的疏忽,被它"undeprecated",还是什么?

这个问题以前曾被问过,但不是问题的主要焦点(并没有得到回答).

ugo*_*ugo 46

我认为您的问题的答案已经在您链接的SO 帖子之一.不幸的是,弃用singleLines不是黑白问题.

已被弃用,但它不会很快到达任何地方.

它被弃用,因为它的表现相对于其继任者来说是差的maxLines.它用于SingleLineTransformationMethod替换你放在的字符串中的换行符和回车符TextView,不像maxLines,"只是"调整TextView基于行数的高度并且不替换字符串.

这种替换字符的方法也意味着singleLine可能会以意想不到的方式中断(例如,如果您使用自定义字体).正是这些性能和可靠性问题导致其被弃用.

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

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

  • 如果它实际上已被弃用,那么在整个文档中是不是将其标记为正式做法?然而,TextView文档并没有这样做.这就是让我怀疑这是否是一种疏忽,或者是否有目的地模糊或其他什么的原因. (3认同)
  • 我不确定为什么文档会建议使用`maxLines`。它没有提供与“ singleLine”相同的行为。 (2认同)

ozb*_*bek 20

已弃用的属性已添加到更改d24b8183b9中,这只是来自Google内部SCM的转储:

从//branches/cupcake/...@130745自动导入

从改变core/res/res/values/attrs.xml diff可以看出添加@deprecated doc注释,但core/java/android/widget/TextView.java diff不会改变来自setSingleLine()doc文档注释的任何内容.

现在无法访问Google的内部SCM历史记录,无法知道attrs.xml文档评论中上述更改的确切原因,但对于您的问题

所以是singleLine弃用的疏忽,被它"undeprecated",还是什么?

一个可能的答案是:TextView单行既没有被弃用,也没有"未经过初步",但它被增强以考虑视图是否可编辑,密码字段或使用影响单/多线性的任何其他输入类型标志.

  • 这里的几个答案提供了一些有用的讨论和洞察这个问题,但由于赏金时间几乎到了,我正在将它授予这个答案,因为它进入最深入,并从可信和官方来源中获取最多.但是,我还没准备好选择一个接受的答案. (2认同)

Täg*_*Täg 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);
}
Run Code Online (Sandbox Code Playgroud)

setInputType覆盖这个mSingleLine值.

编辑:此xml属性现已正式弃用.(自API 3起?).现在可以在AndroidStudio xml编辑器中看到它.


Rui*_*Rui 9

只是为了在讨论中添加更多信息,Lint 现在出现以下错误:

“结合ellipsizemaxLines=1可能导致某些设备崩溃。早期版本的 lint 建议替换为singleLine=truemaxLines=1但在使用ellipsize.

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

所以,我想singleLine是现在,我认为我们应该想出一个新术语……“弃用”?


小智 5

只是想我会补充说 Android Studio 2.2.1 将 singleLine 标记为已弃用。但是,我发现在我的实例中:

android:singleLine="false"
Run Code Online (Sandbox Code Playgroud)

效果很好,而

android:maxLines="2"
Run Code Online (Sandbox Code Playgroud)

才不是。


Epi*_*rce 5

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

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

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


The*_*Jan 5

singleLine不推荐使用.不需要讨论.

唯一的问题是错误的文档.
"使用属性中的textMultiLine标志inputType代替可编辑的文本视图"与您希望通过使用实现的目标完全相反singleLine.

而不是你可以使用android:inputType="text".
对我来说,它完全符合我的要求 - 使用单行进行编辑,没有换行符.


Div*_*vya 5

我刚刚添加android:inputType="text"和删除了android:maxLines="1",它对我来说很好用。


归档时间:

查看次数:

25124 次

最近记录:

7 年,9 月 前