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_HIDDEN和fitSystemWindows不赞成的东西.所以是singleLine弃用的疏忽,被它"undeprecated",还是什么?
这个问题以前曾被问过,但不是问题的主要焦点(并没有得到回答).
ugo*_*ugo 46
我认为您的问题的答案已经在您链接的SO 帖子之一.不幸的是,弃用singleLines不是黑白问题.
它已被弃用,但它不会很快到达任何地方.
它被弃用,因为它的表现相对于其继任者来说是差的maxLines.它用于SingleLineTransformationMethod替换你放在的字符串中的换行符和回车符TextView,不像maxLines,"只是"调整TextView基于行数的高度并且不替换字符串.
这种替换字符的方法也意味着singleLine可能会以意想不到的方式中断(例如,如果您使用自定义字体).正是这些性能和可靠性问题导致其被弃用.
但是,它不会去任何地方因为,因为你链接到状态的SO帖子,它仍然被许多旧的Android应用程序使用,并且它有时仍然有用(例如,当你想在一行上显示整个文本而忽略回车和换行).
请注意,弃用并不一定意味着API正在消失.它只是意味着不鼓励使用它,但可能是允许的.
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单行既没有被弃用,也没有"未经过初步",但它被增强以考虑视图是否可编辑,密码字段或使用影响单/多线性的任何其他输入类型标志.
在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编辑器中看到它.
只是为了在讨论中添加更多信息,Lint 现在出现以下错误:
“结合ellipsize并maxLines=1可能导致某些设备崩溃。早期版本的 lint 建议替换为singleLine=true,maxLines=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)
才不是。
虽然 Android Studio 声称它已被弃用,但实际上我们有一个编辑文本,它应该只允许自己是单行的。
添加maxLines="1"使它允许换行符,这不适合我们的需求。
所以我们又回到使用singleLine="true".
singleLine不推荐使用.不需要讨论.
唯一的问题是错误的文档.
"使用属性中的textMultiLine标志inputType代替可编辑的文本视图"与您希望通过使用实现的目标完全相反singleLine.
而不是你可以使用android:inputType="text".
对我来说,它完全符合我的要求 - 使用单行进行编辑,没有换行符.
| 归档时间: |
|
| 查看次数: |
25124 次 |
| 最近记录: |