2015-11-07 13 views
32

setTextAppearance public void (contesto Context, int reSID) aggiunte a livello di API 1
Questo metodo è sconsigliata a livello API 23. Uso setTextAppearance (int) invece.setTextAppearance deprecated in API di livello 23

La mia domanda: Perché è stato deprecato? Perché non ha più bisogno di Context? E, soprattutto, come usare setTextAppearance(int resId) per le versioni precedenti?

+0

È può farlo per la versione precedente, basta controllare 'Build.VERSION.SDK_INT' quale sarebbe Pankaj

risposta

62

È possibile utilizzare TextViewCompat dalla libreria di supporto:

import android.support.v4.widget.TextViewCompat 

    // ... 

    TextViewCompat.setTextAppearance(view, resId) 

Internamente ottiene il contesto dal punto di vista (view.getContext()) su API < 23.

Source for TextViewCompat

Source for TextView (API23)

48
  1. come utilizzare setTextAppearance(int resId) per le versioni precedenti?

    usare in questo modo:

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

    Per maggiori informazioni: https://stackoverflow.com/a/33393762/4747587

  2. perché è stato deprecato? Perché non ha più bisogno di Context?

    Il motivo per cui è deprecato è che non è necessario passare un context. Utilizza il contesto predefinito fornito dallo View. Guarda il codice sorgente qui sotto. Questo dovrebbe spiegarlo.

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

    Il mContext qui è definito nella classe View. Quindi non è più necessario passare un Context a questo metodo. Lo TextView utilizzerà il contesto fornito durante la sua creazione. Questo ha più senso.

UPDATE

Questa funzionalità è aggiunto come parte della libreria di supporto. Quindi, invece di TextView, utilizzare TextViewCompat [documentation]. Ci sono anche altre classi introdotte insieme a questo, come ImageViewCompat.

+17

Questo è terribile, perché diamine non hanno aggiunto setTextAppearance come parte della classe ContextCompat? Ora dobbiamo avvolgere tutti i nostri metodi setTextAppearance o correre il rischio di errore di codice deprecato nel nostro codice client. – worked

+9

@worked vedi la mia risposta: http://stackoverflow.com/a/37028325/2613692 Hanno aggiunto il metodo alla classe TextViewCompat prima che questa domanda fosse pubblicata. – RustamG

+0

Bello! Grazie a @RustamG – worked

Problemi correlati