setTextAppearance in API-Ebene 23 veraltet

Lesezeit: 1 Minute

public void setTextAppearance (Kontextkontext, int resId) Hinzugefügt in API-Ebene 1

Diese Methode war in API-Ebene 23 veraltet. Verwenden Sie stattdessen setTextAppearance(int).

Meine Frage: Warum ist es veraltet? Warum es nicht braucht Context mehr? Und vor allem, wie man es benutzt setTextAppearance(int resId) für ältere Versionen?

  • Sie können das für ältere Versionen einfach überprüfen Build.VERSION.SDK_INT das wäre

    – Pankaj

    7. November 2015 um 10:54 Uhr


Benutzer-Avatar
RustamG

Sie können verwenden TextViewCompat aus der support/androidX-Bibliothek:

    import android.support.v4.widget.TextViewCompat // for support-library
    import androidx.core.widget.TextViewCompat      // for androidX library

    // ...

    TextViewCompat.setTextAppearance(view, resId)

Intern erhält es den Kontext aus der Ansicht (view.getContext()) auf API < 23.

Quelle für TextViewCompat

Quelle für TextView (API23)

  • Ich erstelle TextViews mit TextView(context) und ich habe versucht, zu TextViewCompat zu wechseln, und es hat keinen öffentlichen Konstruktor, und ich kann die neu erstellte TextView nicht umwandeln und auf diese Weise verwenden. Wie verwenden Sie (androidx) TextViewCompat, wenn Sie Textansichten programmgesteuert erstellen?

    – Francisc0

    15. August 2019 um 14:22 Uhr

  • für Buttons gibt es AppCompatButton und setTextAppearance(context, resId)

    – 10101101

    17. Oktober 2019 um 13:04 Uhr

Benutzer-Avatar
Henry

  1. wie benutzt man setTextAppearance(int resId) für ältere Versionen?

    Verwenden Sie es wie folgt:

    if (Build.VERSION.SDK_INT < 23) {
        super.setTextAppearance(context, resId);
    } else {
        super.setTextAppearance(resId);
    }
    

    Weitere Informationen: https://stackoverflow.com/a/33393762/4747587

  2. Warum wurde es verworfen? Warum braucht es keinen Kontext mehr?

    Der Grund, warum es veraltet ist, ist, dass keine Notwendigkeit besteht, a zu übergeben context. Es verwendet den von der bereitgestellten Standardkontext View. Sehen Sie sich den Quellcode unten an. Das sollte es erklären.

    public void setTextAppearance(@StyleRes int resId) {
         setTextAppearance(mContext, resId);
    }
    

    Das mContext hier ist in der definiert View Klasse. Sie brauchen also nicht a weiterzugeben Context zu dieser Methode nicht mehr. Das TextView verwendet den Kontext, der ihm während seiner Erstellung bereitgestellt wurde. Das macht mehr Sinn.

AKTUALISIEREN

Diese Funktionalität wird als Teil der Support-Bibliothek hinzugefügt. Also statt TextViewverwenden TextViewCompat [documentation]. Es werden auch andere Klassen eingeführt, wie z ImageViewCompat.

  • Das ist schrecklich, warum zum Teufel haben sie setTextAppearance nicht als Teil der ContextCompat-Klasse hinzugefügt? Jetzt müssen wir alle unsere setTextAppearance-Methoden umschließen oder das Risiko eingehen, dass veralteter Code in unserem Client-Code fehlschlägt.

    – hat funktioniert

    10. Januar 2016 um 20:07 Uhr

  • @worked siehe meine Antwort: stackoverflow.com/a/37028325/2613692 Sie haben die Methode zur TextViewCompat-Klasse hinzugefügt, bevor diese Frage gepostet wurde.

    – RustamG

    26. Juli 2016 um 10:34 Uhr

  • Nett! Danke @RustamG

    – hat funktioniert

    5. November 2016 um 1:19 Uhr

Die obige Antwort ist richtig – hier ist auch ein anderer Weg. In Kotlin habe ich eine Erweiterung geschrieben, die das Leben einfacher macht, wenn man Support leistet SDK 23 und unten sowie oben.

   fun TextView.setAppearance(context: Context, res: Int) {
        if (Build.VERSION.SDK_INT < 23) {
            setTextAppearance(context, res)
        } else {
            setTextAppearance(res)
        }
    }

1176390cookie-checksetTextAppearance in API-Ebene 23 veraltet

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy