web-dev-qa-db-fra.com

L'attribut xml singleLine est-il obsolète ou non dans Android?

singleLine est/a été utilisé dans les fichiers de présentation XML pour TextView et EditText à peu près comme suit:

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:singleLine="true" />

Certaines personnes sur SO disent que singleLine est obsolète, alors que d'autres personnes suggèrent toujours de l'utiliser. Parfois, il semble même nécessaire d'utiliser lorsque maxLines="1" ne fonctionne pas. (voir ici , ici et ici )

Les docs devraient être l'endroit où aller pour répondre à cette question, non? Ici, ils disent:

Cette constante est déconseillée dans l'API de niveau 3. 

Cet attribut est obsolète. Utilisez plutôt maxLines pour modifier la mise en page d'un fichier statique text et utilisez l'indicateur textMultiLine dans l'attribut inputType pour les vues de texte modifiables (si singleLine et inputType sont fournis , les indicateurs inputType remplacent la valeur de singleLine).

Cependant, dans TextView docs , rien n'indique qu'il soit déconseillé, ni pour Android:singleLine , ni pour setSingleLine ni pour setTransformationMethod . En comparaison, les mêmes documents TextView indiquent que d'autres éléments tels que STATUS_BAR_HIDDEN et fitSystemWindows sont obsolètes. Donc, la désapprobation singleLine est-elle une omission, était-elle "non déclarée", ou quoi? 

Cette question a été précédemment posée avant mais n'était pas le sujet principal de la question (et n'a pas reçu de réponse).

57
Suragch

Je pense que la réponse à votre question se trouve déjà dans l’un des SO messages liés à vous . Malheureusement, la dépréciation de singleLines n’est pas une matière noire ou blanche.

Est obsolète, mais pas ne va nulle part bientôt. 

Il est déconseillé car sa performance est médiocre par rapport à son successeur, maxLines. Il utilise SingleLineTransformationMethod pour remplacer les nouvelles lignes et les retours à la ligne dans la chaîne que vous placez dans TextView, contrairement à maxLines, qui "ajuste" simplement la hauteur de la TextView en fonction du nombre de lignes et ne remplace pas la chaîne. 

Cette méthode de remplacement des caractères signifiait également que singleLine pouvait rompre de manière inattendue } (par exemple, si vous utilisez des polices personnalisées). Ce sont ces problèmes de performances et de fiabilité qui ont conduit à sa dépréciation.

Cependant, il ne va nulle part parce que, comme le SO vous lie à des états, il est toujours utilisé par de nombreuses anciennes applications Android, et vous souhaitez afficher le texte entier sur une ligne et ignorer les retours à la ligne et les nouvelles lignes).

Notez que la dépréciation ne signifie pas nécessairement qu'une API disparaît. Cela signifie simplement que son utilisation est découragée, mais peut être autorisée.

43
ugo

Dans le code secret officiel de TextView (v5.1.0 r1):

Android:singleLine n'est pas annoté avec @Deprecated.

Je vois aussi ceci dans setInputType method:

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 remplace la valeur mSingleLine so.

EDIT: Cet attribut xml est maintenant officiellement obsolète. ( depuis API 3? ). Il est maintenant visible dans l'éditeur AndroidStudio xml.

9
Täg

singleLine IS obsolète. Aucune discussion nécessaire.

Le seul problème est la mauvaise documentation.
"utiliser l'indicateur textMultiLine dans l'attribut inputType à la place pour les vues de texte modifiables" est l'opposé de ce que vous souhaitez obtenir en utilisant singleLine.

Au lieu de cela, vous pouvez utiliserAndroid:inputType="text"
Pour moi, il a fait exactement ce que je voulais - une édition avec une seule ligne sans sauts de ligne.

6
The incredible Jan

Je pensais juste que je vais ajouter que Android Studio 2.2.1 marque singleLine comme étant déconseillé . Cependant, j’ai constaté que, dans mon cas:

Android:singleLine="false"

fonctionne bien, alors que 

Android:maxLines="2"

ne fait pas. 

4
Seb

Alors qu'Android Studio prétend qu'il est obsolète, nous avions en réalité un texte d'édition qui ne devrait se permettre que sur une seule ligne.

L’ajout de maxLines="1" a permis d’autoriser les caractères de nouvelle ligne, ce qui ne convient pas à nos besoins.

Nous sommes donc revenus à l’utilisation de singleLine="true".

4
EpicPandaForce

Juste pour ajouter quelques informations à la discussion, Lint a maintenant l'erreur suivante:

"La combinaison de ellipsize et maxLines=1 peut entraîner des pannes sur certains appareils. Des versions antérieures de lint recommandaient de remplacer singleLine=true par maxLines=1, mais cela ne devrait pas être fait lors de l'utilisation de ellipsize.

Plus d'infos: https://issuetracker.google.com/issues/36950033 "

Donc, je suppose que singleLine est maintenant, et je pense que nous devrions proposer un nouveau terme ... "obsolète"?

4
Rui

Je viens d'ajouter Android:inputType="text"et d'enlever Android:maxLines="1", cela a bien fonctionné pour moi.

3
Divya

Le fait de fournir uniquement Android:maxLines="1" et Android:minLines="1" ne résoudra pas le problème lié au clavier actionNext Utilisez Android:inputType="text" pour la même chose.

1
oj24031989

Autre moyen simple, utilisez: Android:maxLines="1"

0
Sanat Chandravanshi