2015-11-07 7 views
32

public void setTextAppearance (Context Zusammenhang int Resid) Added in API-Ebene 1
dieser Methode in der API-Ebene veraltet anstelle 23. Verwendung setTextAppearance (int).setTextAppearance in API-Ebene veraltet 23

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

+0

Sie kann dies für ältere Version tun, einfach überprüfen 'Build.VERSION.SDK_INT' was wäre Pankaj

Antwort

62

Sie TextViewCompat von der Support-Bibliothek verwenden können:

import android.support.v4.widget.TextViewCompat 

    // ... 

    TextViewCompat.setTextAppearance(view, resId) 

Intern wird es den Kontext aus der Sicht (view.getContext()) auf API < 23.

Source for TextViewCompat

Source for TextView (API23)

48
  1. wie setTextAppearance(int resId) für ältere Versionen zu verwenden?

    es wie folgt verwendet:

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

    Für weitere Informationen: https://stackoverflow.com/a/33393762/4747587

  2. Warum es veraltet? Warum benötigt es keinen Context mehr?

    Der Grund, warum es veraltet ist, gibt es keine context übergeben müssen. Es verwendet den Standardkontext, der von View bereitgestellt wird. Sehen Sie sich den Quellcode unten an. Das sollte es erklären.

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

    Die mContext hier in der View Klasse definiert. Sie müssen also keine Context an diese Methode weitergeben. Die TextView wird den Kontext verwenden, der ihr während der Erstellung bereitgestellt wurde. Das macht mehr Sinn.

UPDATE

Diese Funktionalität wird im Rahmen der Support Bibliothek hinzugefügt. Verwenden Sie anstelle von TextView [documentation]. Es werden auch andere Klassen wie ImageViewCompat eingeführt.

+17

Das ist schrecklich, warum haben sie nicht setTextAppearance als Teil der ContextCompat-Klasse hinzugefügt? Jetzt müssen wir alle unsere setTextAppearance-Methoden umbrechen oder das Risiko eines veralteten Code-Fehlers in unserem Client-Code laufen lassen. – worked

+9

@worked siehe meine Antwort: http://StackOverflow.com/a/37028325/2613692 Sie haben die Methode der TextViewCompat-Klasse hinzugefügt, bevor diese Frage gepostet wurde. – RustamG

+0

Schön! Danke @RustamG – worked