6

Eventuali duplicati:
How to deal with deprecated classes in Android to keep compatibilityCome posso evitare metodi deprecati e mantenere la retrocompatibilità?

ho incontrato il Display.getWidth() metodo deprecato e vide che è stato sostituito con android.view.getSize(). Tuttavia, getSize() è disponibile solo in quanto le API 13 e View non sono incluse nella libreria di supporto Android V4.

Quindi, se voglio evitare le chiamate deprecate, come posso fare questo senza mantenere diversi progetti/build per vari livelli API.

+0

Qui è la vostra soluzione http://stackoverflow.com/a/10165103/614807 –

+0

@ChiragRaval che non è una soluzione a questo problema. Quella risposta afferma solo che è "ok" usare metodi deprecati. –

risposta

4

dato un oggetto chiamato Displaydisplay, questo dovrebbe funzionare:

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, utilizzare Build.VERSION.SDK_INT ad espandersi tra il "prima" e "dopo" i casi per cui viene introdotta una nuova API.

Ciò richiederà il target di build (Progetto> Proprietà> Android in Eclipse) da impostare su API 13+, quindi è possibile chiamare getSize().

+1

BTW, presumo che la larghezza sia 'x' in un' Punto' - la documentazione è decisamente sfocata su questo, um, punto. :-) – CommonsWare

2

C'è uno sviluppatori di Android ufficiale classe Creating Backward-Compatible UIs:

Questa classe viene illustrato come utilizzare i componenti dell'interfaccia utente e API disponibili in versioni più recenti di Android in un modo compatibile con le versioni, assicurando che l'applicazione viene eseguita ancora sulle versioni precedenti della piattaforma.

Essi sostengono l'uso di interfacce Java per le librerie che non sono back-port per ottenere una soluzione più orientata agli oggetti. Quindi estendali in due classi concrete: una che fornisce un comportamento alternativo per le piattaforme non supportate e una che chiama l'effettiva API per le piattaforme supportate.

Quindi esiste una classe factory che crea un'istanza della classe corretta controllando la piattaforma corrente rispetto all'intervallo della piattaforma supportata. In definitiva, si riduce a un condizionale come if (Build.VERSION.SDK_INT >= HONEYCOMB_MR2).