web-dev-qa-db-fra.com

setTextAppearance déconseillé au niveau de l'API 23

public void setTextAppearance (Context context, int resId) Ajouté au niveau 1 de l'API
Cette méthode est obsolète au niveau de l'API 23. Utilisez plutôt setTextAppearance (int).

Ma question: Pourquoi est-il déconseillé? Pourquoi n'a-t-il plus besoin de Context? Et surtout, comment utiliser setTextAppearance(int resId) pour les anciennes versions?

43
Alireza Farahani

Vous pouvez utiliser TextViewCompat à partir de la bibliothèque support/androidX:

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

    // ...

    TextViewCompat.setTextAppearance(view, resId)

En interne, il obtient le contexte de la vue (view.getContext()) sur l'API <23.

Source pour TextViewCompat

Source pour TextView (API23)

101
RustamG
  1. comment utiliser setTextAppearance(int resId) pour les anciennes versions?

    Utilisez-le comme ceci:

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

    Pour plus d'informations: https://stackoverflow.com/a/33393762/4747587

  2. Pourquoi est-il devenu obsolète? Pourquoi n'a-t-il plus besoin de Context?

    La raison pour laquelle il est obsolète est qu'il n'est pas nécessaire de passer un context. Il utilise le contexte par défaut fourni par View. Regardez le code source ci-dessous. Cela devrait l'expliquer.

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

    Le mContext ici est défini dans la classe View. Vous n'avez donc plus besoin de passer un Context à cette méthode. TextView utilisera le contexte qui lui est fourni lors de sa création. Cela a plus de sens.

[~ # ~] mise à jour [~ # ~]

Cette fonctionnalité est ajoutée dans le cadre de la bibliothèque de support. Donc au lieu de TextView, utilisez TextViewCompat[documentation] . Il y a aussi d'autres classes introduites avec cela, comme ImageViewCompat.

48
Henry