2015-10-28 15 views
6

Pulsante setTextAppearance (contesto Context, int resid) è deprecatopulsante setTextAppearance è deprecato

e setTextAppearance (int resid) - disponibile solo per il livello di API 23

cosa devo usare, invece?

+0

Che API stai sviluppando per –

+0

Qual è il tuo problema esattamente? Chiamare il vecchio metodo sulle nuove versioni di Android chiamerà il nuovo metodo internamente in modo da ottenere lo stesso risultato. – Froyo

risposta

8

Deprecato significa che a volte il supporto verrà eliminato per questo in futuro, ma funziona ancora come previsto. Su API più anziani, non ci sono alternative, dal momento che il nuovo setTextAppearance(int resid) stato rilasciato solo con il livello di API 23.

Se vuoi essere sicuro per un lungo periodo di tempo, è possibile utilizzare il seguente codice:

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

Questo codice preferisce la nuova versione sui telefoni con livello API 23 o superiore, ma utilizza quello vecchio quando il livello API 23 non è disponibile.

8

Ho intenzione di dire lo stesso di @Daniel Zolnai. Ma non effettuare il controllo Build.VERSION>SDK_INT < 23 in tutti i punti del codice. Metti questo in un posto, quindi sarà facile per te rimuoverlo in futuro o modificarlo. Quindi come si fa? Lo farò per il caso yourButton.

  1. Non utilizzare mai Button o qualsiasi altra vista fornita da Android proprio così. Dico questo, perché in futuro dovrai modificare qualcosa e quindi è meglio avere il tuo MyButton o qualcosa del genere. Quindi creare MyButton estende Button.

  2. All'interno MyButton, mettere il codice qui sotto:

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


In questo modo è sempre possibile utilizzare setTextAppearance senza bisogno di preoccuparsi di controllo per le versioni costruire. Se in futuro, hai intenzione di rimuovere l'intera faccenda, allora devi refactor in un solo posto. Questo è un po 'di lavoro, ma a lungo termine, questo ti aiuterà molto e ridurrà alcuni incubi di manutenzione di .

+0

Possiamo essere certi che 'TextView.setTextAppearance (int resId)' non sarà chiamato anche dal sistema, dando luogo a una doppia chiamata a 'super..'? –

+0

Sì. Solo l'API <23 chiamerà 'setTextAppearance (int resId)'. Non c'è una doppia chiamata a 'super'. – Henry

+0

intendi API> = 23 chiamate * solo * 'STA (int)' e * solo * API <23 chiamate 'STA (context, int)', giusto? :) Quando il sistema chiama questi metodi btw? –