6

Powiel możliwe:
How to deal with deprecated classes in Android to keep compatibilityJak mogę uniknąć przestarzałych metod i zachować kompatybilność wsteczną?

Pobiegłem do nieaktualnych Display.getWidth() metody i zobaczył, że został zastąpiony android.view.getSize(). Jednak getSize() jest dostępny tylko dlatego, że API 13 i View nie są uwzględniane w bibliotece wsparcia V4 Android.

Tak więc, jeśli chcę uniknąć nieaktualnych wywołań, jak mogę to zrobić bez utrzymywania różnych projektów/wersji dla różnych poziomów interfejsu API.

+0

Oto twoje rozwiązanie http://stackoverflow.com/a/10165103/614807 –

+0

@ChiragRaval, które nie jest rozwiązaniem tego pytania. Ta odpowiedź po prostu stwierdza, że ​​używanie "nieużywanych" metod jest przestarzałe. –

Odpowiedz

4

Biorąc pod uwagę Display obiekt o nazwie display, to powinno działać:

int width=-1; 

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB_MR2) { 
    Point size=new Point(); 
    size=display.getSize(size); 
    width=size.x; 
} 
else { 
    width=display.getWidth(); 
} 

IOW, użyj Build.VERSION.SDK_INT rozgałęzienie między „przed” i „po” dla przypadków, w których wprowadza się nowe API.

Będzie to wymagać ustawienia docelowego kompilacji (Projekt> Właściwości> Android w środowisku Eclipse) na poziom API 13+, aby można było zadzwonić pod numer getSize().

+1

BTW, zakładam, że szerokość to 'x' w' Point' - dokumentacja jest zdecydowanie niewyraźna w tym, um, punkcie. :-) – CommonsWare

2

Urzędowe klasy programistów Android Creating Backward-Compatible UIs:

Klasa ta pokazuje, jak korzystać z komponentów UI i API dostępne w nowszych wersji Androida w sposób zgodny wstecz, dzięki czemu aplikacja nadal działa w poprzednich wersjach platformy.

Zalecają stosowanie interfejsów Java dla bibliotek, które nie są wstecznie przenoszone, aby uzyskać bardziej obiektowe rozwiązanie. Następnie rozszerza się je na dwie konkretne klasy: jedną zapewniającą alternatywne działanie dla nieobsługiwanych platform i taką, która wywołuje rzeczywisty interfejs API dla obsługiwanych platform.

Następnie istnieje klasa fabryczna, która tworzy instancję odpowiedniej klasy, sprawdzając aktualną platformę względem obsługiwanego zakresu platformy. Ostatecznie jednak sprowadza się do warunkowego, takiego jak if (Build.VERSION.SDK_INT >= HONEYCOMB_MR2).

Powiązane problemy