texto studio plain mostrar example español edittext android android-edittext attributes textview android-singleline

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 en maxLines lugar para cambiar el diseño de un texto estático, y use el indicador textMultiLine 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.