singleLine
ist/wurde in XML-Layoutdateien für TextView
und EditText
verwendet, etwa wie folgt:
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:singleLine="true" />
Einige Personen auf SO sagen, singleLine
ist veraltet, während andere Personen immer noch die Verwendung von _ vorschlagen. Manchmal scheint es sogar notwendig zu sein, wenn maxLines="1"
nicht funktioniert. (siehe hier , hier und hier )
Die Dokumente sollten der richtige Ort sein, um diese Frage zu beantworten, oder? Hier sagen sie:
Diese Konstante wurde in API-Level 3 nicht mehr unterstützt.
Dieses Attribut lautet veraltet Verwenden Sie stattdessen
maxLines
, um das Layout einer statischen .__ zu ändern. Text, und verwenden Sie das FlagtextMultiLine
im inputType-Attribut stattdessen für bearbeitbare Textansichten (wenn sowohl singleLine als auch inputType bereitgestellt werden, überschreiben die inputType-Flags den Wert von singleLine).
In den TextView-Dokumenten gibt es jedoch keinen Hinweis, dass es veraltet ist, weder für Android:singleLine
noch für setSingleLine
oder für setTransformationMethod
. Dieselben TextView-Dokumente geben zum Vergleich an, dass andere Dinge wie STATUS_BAR_HIDDEN
und fitSystemWindows
veraltet sind. Ist also die singleLine
-Ausweisung eine Auslassung, war sie "nicht bewertet" oder was?
Diese Frage war zuvor schon einmal gestellt , war aber nicht der Schwerpunkt der Frage (und wurde nicht beantwortet).
Ich denke, die Antwort auf Ihre Frage befindet sich bereits in einem der SO Posts, auf die Sie verlinkt haben . Leider ist die Abwertung von singleLines
nicht schwarz -oder-weiße Substanz.
Es ist ist veraltet, aber es ist nicht irgendwohin zu jeder Zeit in Kürze.
Es wurde verworfen, weil seine Leistung im Vergleich zu seinem Nachfolger maxLines
schlecht ist. Es verwendet SingleLineTransformationMethod
, um Zeilenumbrüche und Zeilenumbrüche in der Zeichenfolge zu ersetzen, die Sie in TextView
einfügen, im Gegensatz zu maxLines
, das "nur" die Höhe anpasst des TextView
basiert auf der Anzahl der Zeilen und ersetzt keinen String.
Diese Methode zum Ersetzen von Zeichen bedeutete auch, dass singleLine
auf unerwartete Weise unterbrochen (z. B. wenn Sie benutzerdefinierte Schriftarten verwenden). Es waren diese Leistungs- und Zuverlässigkeitsprobleme, die zu seiner Nichtbeachtung führten.
Jedoch wird es nirgendwo hingehen, weil , wie der SO= Post, den Sie mit Staaten verknüpft haben, noch verwendet wird Bei vielen alten Android Anwendungen, und ist es manchmal immer noch nützlich (zB wenn Sie den gesamten Text anzeigen möchten Zeilenumbrüche und Zeilenumbrüche ignorieren).
Beachten Sie, dass Verfall nicht unbedingt bedeutet, dass eine API nicht mehr verfügbar ist. Dies bedeutet lediglich, dass von seiner Verwendung abgeraten wird, diese jedoch zulässig sein kann.
Das veraltete Attribut wurde in change d24b8183b9 hinzugefügt. Dies ist nichts anderes als ein Speicherauszug von Googles internem SCM:
autoimport aus //branches/cupcake/[email protected]
Wie aus der Änderung hervorgeht, fügt core/res/res/values/attrs.xml
diff den @deprecated-Dokumentkommentar hinzu, core/Java/Android/widget/TextView.Java
diff ändert jedoch nichts an dem Dokumentkommentar von setSingleLine()
.
Ohne Zugriff auf die interne SCM-Historie von Google ist es nicht möglich zu wissen, was genau in attrs.xml
doc kommentiert wurde, sondern für Ihre Frage
Ist also die
singleLine
-Ausweisung eine Auslassung, war sie "nicht bewertet" oder was?
eine mögliche Antwort ist: TextView
s einzeilige Zeile war weder veraltet noch "undeprecated", wurde jedoch dahingehend erweitert, dass berücksichtigt wird, ob die Ansicht editierbar ist, ein Kennwortfeld ist oder ein anderes Eingabe-Typ-Flag verwendet wird, das die Einzel-/Mehrfachwäscherei beeinflusst.
Im offiziellen grepcode von TextView
(v5.1.0 r1):
Android:singleLine
ist nicht mit @Deprecated
kommentiert.
Ich sehe das auch in 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
überschreibt so den mSingleLine
-Wert.
BEARBEITEN: Dieses XML-Attribut ist jetzt offiziell veraltet. ( seit API 3? ). Es ist jetzt im AndroidStudio-XML-Editor sichtbar.
singleLine
IS veraltet. Keine Diskussion nötig.
Das einzige Problem ist die falsche Dokumentation.
"Verwenden Sie stattdessen das textMultiLine
-Flag im inputType
-Attribut für bearbeitbare Textansichten" ist das direkte Gegenteil dessen, was Sie mit singleLine
erreichen möchten.
Stattdessen können SieAndroid:inputType="text"
verwenden.
Für mich hat es genau das gemacht, was ich wollte - eine Bearbeitung mit einer einzelnen Zeile ohne Zeilenumbrüche.
Ich habe nur gedacht, dass ich hinzufügen werde, dass Android Studio 2.2.1 singleLine als veraltet markiert Was ich jedoch gefunden habe, ist das in meiner Instanz:
Android:singleLine="false"
funktioniert gut, während
Android:maxLines="2"
nicht.
Während Android Studio behauptet, es sei veraltet, hatten wir in Wirklichkeit einen Bearbeitungstext, der nur einzeilig sein sollte.
Durch das Hinzufügen von maxLines="1"
wurden Zeilenumbrüche zugelassen, die für unsere Anforderungen nicht geeignet sind.
Also haben wir wieder singleLine="true"
verwendet.
Nur um weitere Informationen zur Diskussion hinzuzufügen, hat Lint jetzt den folgenden Fehler:
"Die Kombination von ellipsize
und maxLines=1
kann auf einigen Geräten zu Abstürzen führen. In früheren Versionen von lint wurde empfohlen, singleLine=true
durch maxLines=1
zu ersetzen. Dies sollte jedoch bei Verwendung von ellipsize
nicht geschehen.
Weitere Informationen: https://issuetracker.google.com/issues/36950033 "
Ich denke also, dass singleLine
jetzt ist, und ich denke, wir sollten uns einen neuen Begriff einfallen lassen ... "veraltet"?
Ich habe gerade Android:inputType="text"
hinzugefügt und Android:maxLines="1"
entfernt, es hat gut für mich funktioniert.
Wenn Sie nur Android:maxLines="1"
und Android:minLines="1"
angeben, wird das Problem mit der Tastatur actionNext
nicht gelöst. Verwenden Sie Android:inputType="text"
für dasselbe.
Einfache Alternative, verwenden Sie: Android:maxLines="1"