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'indicateurtextMultiLine
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).
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.
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.
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.
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.
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"
.
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"?
Je viens d'ajouter Android:inputType="text"
et d'enlever Android:maxLines="1"
, cela a bien fonctionné pour moi.
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.
Autre moyen simple, utilisez: Android:maxLines="1"