studio - ¿El atributo xml singleLine está en desuso o no está en Android?
textview android studio (10)
singleLine
es / fue usado en archivos de diseño xml para
TextView
y
EditText
algo como lo siguiente:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true" />
Algunas personas
en SO dicen que
singleLine
está en desuso, mientras que
otras personas
aún sugieren usarlo.
A veces incluso parece necesario usar cuando
maxLines="1"
no funciona.
(ver
here
,
here
y
here
)
Los documentos deberían ser el lugar para ir a responder esta pregunta, ¿verdad? Aquí dicen:
Esta constante quedó en desuso en el nivel 3 de API.
Este atributo está en desuso. Use
maxLines
enmaxLines
lugar para cambiar el diseño de un texto estático, y use el indicadortextMultiLine
en el atributo inputType para vistas de texto editables (si se proporcionan singleLine y inputType, los indicadores inputType anularán el valor de singleLine).
Sin embargo,
en los documentos TextView
, no hay indicios de que esté en desuso, ya sea para
android:singleLine
o para
setSingleLine
o para
setTransformationMethod
.
Los mismos documentos de TextView, en comparación, afirman que otras cosas como
STATUS_BAR_HIDDEN
y
fitSystemWindows
están en desuso.
Entonces, ¿la desaprobación de
singleLine
una omisión, fue "desaprobada" o qué?
Esta pregunta ya se había hecho anteriormente, pero no era el foco principal de la pregunta (y no fue respondida).
Acabo de agregar
android:inputType="text"
y
android:maxLines="1"
, funcionó bien para mí.
Creo que la respuesta a su pregunta ya está en una de las
publicaciones
SO a las
que se vinculó
.
Desafortunadamente, la desaprobación de
singleLines
no es una cuestión de blanco o negro.
Está en desuso, pero no irá a ningún lado pronto.
Fue obsoleto porque
su rendimiento es pobre, en relación con su sucesor,
maxLines
.
Utiliza
SingleLineTransformationMethod
para reemplazar nuevas líneas y retornos de carro en la Cadena que coloca en
TextView
, a diferencia de
maxLines
, que "simplemente" ajusta la altura de
TextView
función del número de líneas y no reemplaza String.
Este método de reemplazar caracteres también significaba que
singleLine
podría
romperse de manera inesperada
(por ejemplo, si usa fuentes personalizadas).
Fueron estos problemas de rendimiento y confiabilidad los que llevaron a su desaprobación.
Sin embargo, no va a ninguna parte porque , como la publicación SO que ha vinculado a los estados, todavía está en uso por muchas aplicaciones antiguas de Android, y todavía es útil a veces (por ejemplo, cuando desea mostrar todo el texto en una línea e ignorarlo). retornos de carro y nuevas líneas).
Tenga en cuenta que la desaprobación no significa necesariamente que una API vaya a desaparecer. Simplemente significa que se desaconseja su uso, pero puede permitirse.
El atributo en desuso se agregó en el cambio d24b8183b9 que no es más que un volcado del SCM interno de Google:
importación automática desde //branches/cupcake/...@130745
Como se puede ver en el cambio
core/res/res/values/attrs.xml
diff
agrega el comentario de documento @deprecated, pero
core/java/android/widget/TextView.java
diff
no altera nada del
setSingleLine()
de
setSingleLine()
comentario.
Ahora sin acceso al historial interno de SCM de Google, no es posible saber qué causó exactamente el cambio anterior en el comentario del documento
attrs.xml
, pero para su pregunta
Entonces, ¿la desaprobación de
singleLine
una omisión, fue "desaprobada" o qué?
Una posible respuesta es: la
TextView
única de
TextView
no estaba en desuso ni estaba "en desuso", pero se mejoró para tener en cuenta si la vista es editable, un campo de contraseña o si utiliza cualquier otro indicador de tipo de entrada que afecte a uno / varios linealidad
En el grepcode oficial de
TextView
(v5.1.0 r1):
android:singleLine
no se anota con
@Deprecated
.
También veo esto en el método
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
anula el valor de
mSingleLine
así.
EDITAR: Este atributo xml ahora está oficialmente en desuso. (¿ desde API 3? ) Ahora es visible en el editor de AndroidStudio xml.
Si bien Android Studio afirma que está en desuso, en realidad teníamos un texto de edición que debería permitirse ser solo de una línea.
Agregar
maxLines="1"
hizo que permitiera caracteres de nueva línea, lo que no es adecuado para nuestras necesidades.
Así que volvimos a usar
singleLine="true"
.
Solo pensé que agregaría que Android Studio 2.2.1 marca singleLine como obsoleto. Sin embargo, lo que encontré es que en mi caso:
android:singleLine="false"
funciona bien, mientras que
android:maxLines="2"
no.
Solo por agregar más información a la discusión, Lint ahora tiene el siguiente error:
"La combinación de
ellipsize
y
maxLines=1
puede provocar fallas en algunos dispositivos. Las versiones anteriores de lint recomendaban reemplazar
singleLine=true
con
maxLines=1
pero eso no debería hacerse cuando se usa
ellipsize
.
Más información: https://issuetracker.google.com/issues/36950033 "
Entonces, supongo que
singleLine
es ahora, y creo que deberíamos encontrar un nuevo término ... ¿"obsoleto"?
Solo proporcionar
android:maxLines="1"
y
android:minLines="1"
no resolverá el problema de la
actionNext
del teclado.
actionNext
problema relacionado.
Use
android:inputType="text"
para el mismo.
android:maxLines="1"
alternativa simple, use:
android:maxLines="1"
singleLine
está en desuso.
No se necesita discusión.
El único problema es la documentación incorrecta.
"utilizar el indicador
textMultiLine
en el atributo
inputType
lugar para vistas de texto editables" es lo opuesto directo a lo que desea lograr mediante el uso de
singleLine
.
En lugar de eso, puede usar
android:inputType="text"
.
Para mí, hizo exactamente lo que quería: una edición con una sola línea sin saltos de línea.