2015-10-28 5 views
6

Knopf setTextAppearance (Context Kontext, int resid) ist veraltetKnopf setTextAppearance ist

und setTextAppearance (int resid) ist veraltet - nur für die API-Ebene 23

Was soll ich stattdessen verwenden?

+0

Welche API entwickeln Sie für –

+0

Was ist Ihr Problem genau? Wenn Sie die alte Methode für neue Android-Versionen aufrufen, wird die neue Methode intern aufgerufen, sodass Sie das gleiche Ergebnis erhalten. – Froyo

Antwort

8

Veraltet bedeutet, dass Unterstützung manchmal für die Zukunft fallengelassen wird, aber es funktioniert immer noch wie erwartet. Bei älteren APIs, gibt es keine Alternative, da die neuen setTextAppearance(int resid) nur mit API-Ebene veröffentlicht wurde 23.

Wenn Sie für eine lange Zeit sicher sein möchten, können Sie den folgenden Code verwenden:

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

Dieser Code bevorzugt die neue Version auf Telefonen mit API-Stufe 23 oder höher, verwendet jedoch die alte, wenn die API-Stufe 23 nicht verfügbar ist.

8

Ich werde das gleiche wie @Daniel Zolnai sagen. Aber machen Sie nicht die Überprüfung Build.VERSION>SDK_INT < 23 an allen Stellen in Ihrem Code. Stellen Sie dies an einem Ort auf, so dass es für Sie einfach ist, dies in Zukunft zu entfernen oder Änderungen daran vorzunehmen. So wie es geht? Ich werde dies für den yourButton Fall tun.

  1. Verwenden Sie niemals Button oder eine andere von Android zur Verfügung gestellte Ansicht. Ich sage das, weil Sie in der Zukunft etwas zwicken müssen und deshalb ist es besser, Ihre eigene oder etwas von dieser Art zu haben. So erstellen MyButton erweitert Button.

  2. Innen MyButton, setzen Sie den folgenden Code:

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


diese Weise können Sie immer setTextAppearance, ohne dass verwenden können über die Überprüfung für BUILD-Versionen zu kümmern. Wenn Sie in Zukunft planen, das ganze Ding zu entfernen, dann müssen Sie refactor an nur einem Ort. Das ist ein bisschen Arbeit, aber auf lange Sicht wird dir das sehr helfen und einige Wartungs-Albträume reduzieren.

+0

Können wir sicher sein, dass 'TextView.setTextAppearance (int resId)' auch nicht vom System aufgerufen wird, was zu einem doppelten Aufruf von 'super..' führt? –

+0

Ja. Nur API <23 ruft 'setTextAppearance (int resId)' auf. Es gibt keinen Doppelruf an "super". – Henry

+0

du meinst API> = 23 Aufrufe * nur * 'STA (int)' und * nur * API <23 Aufrufe 'STA (context, int)', oder? :) Wann ruft das System diese Methoden ab? –