Skip to main content

Android Studio: personalizzare l’immagine “torna indietro” dell’ActionBar (homeAsUpIndicator)

Come molti di voi sapranno, il controllo ActionBar di una applicazione Android può essere configurato per prevedere una “navigazione all’indietro” (Up Navigation) da una Activity a un’altra, purché quest’ultima sia stata configurata come parent.

Per una guida completa alla Up Navigation rimandiamo all’apposita pagina della documentazione ufficiale. Ricorderemo solo che, per visualizzare l’icona, è necessario impostare correttamente il metodo setDisplayHomeAsUpEnabled()  nel seguente modo:

Questo comando provocherà la visualizzazione di una icona di navigazione sul lato sinistro della ActionBar dell’Activity. 

Per sostituire l’icona con un drawable personalizzato è sufficiente inserire questa dichiarazione all’interno del proprio theme:

Il file dove inserire questa istruzione è solitamente  /values/styles.xml , ma può essere anche  /values/themes.xml  o un altro file, a seconda di come avete organizzato la vostra applicazione. Nel caso in cui vogliate supportare anche API inferiori alla 11 il contenuto di cui sopra andrà inserito nel file presente nella cartella /values-v11/ , mentre nella cartella /values/  andrà utilizzata la sintassi compatibile con le API meno recenti:

 

Di seguito vi proponiamo due archivi .rar contenenti alcune icone di esempio per la personalizzazione del vostro homeAsUpIndicator: in entrambi i casi si tratta di icone chiare, da utilizzare quindi per una ActionBar che abbia un background color di colore scuro.

Felice sviluppo!

Android: come estendere una ImageView in larghezza adattando l’altezza in modo proporzionale

Può capitare, sviluppando una app per dispositivi Android, di avere l’esigenza di estendere le dimensioni di una immagine in modo da farle coprire orizzontalmente tutto lo schermo disponibile, mantenendo inalterate le sue proporzioni. Questo significa che l’altezza dell’immagine suddetta dovrà adattarsi in modo proporzionale alla larghezza, così da mantenere inalterato l’aspect ratio originario.

Il problema

Ottenere questo risultato in HTML è estremamente semplice: è sufficiente impostare la width dell’immagine in questione al 100%, omettendo qualsiasi informazione in merito alla height e lasciando così che sia il browser a determinarla in modo proporzionale. Sfortunatamente, in Android la questione è più complessa: nell’elemento ImageView altezza e larghezza sono due parametri obbligatori, che è possibile valorizzare con un numero fisso in px, dp o altro, in base al contenitore mediante il comando match_parent oppure in base al contenuto mediante il comando wrap_content. In tutti e tre i casi non è possibile definire un comportamento dell’altezza realmente proporzionale rispetto al contenuto. Il meglio che è possibile fare utilizzando una normale ImageView è impostare gli attributi android:layout_widthandroid:layout_height e android:scaleType in modo che si adattino automaticamente alle dimensioni del layout contenitore nel seguente modo:

Questo metodo consente di ottenere il risultato sperato nella maggior parte degli scenari, ma ha il grande difetto di non funzionare allo stesso modo su tutti i dispositivi Android e con tutte le immagini.

La soluzione

Chi ha detto che è necessario utilizzare una normale ImageView? Questo interessantissimo post su StackOverflow mostra come è possibile estendere una View per ottenere un risultato analogo a quello che stiamo cercando. Partendo da quell’esempio possiamo quindi sviluppare una estensione della classe ImageView che dimensioni automaticamente l’altezza sulla base del ridimensionamento della larghezza in modo proporzionale rispetto all’aspect ratio dell’immagine originaria.

Questo il codice completo:

 

E questa è l’implementazione all’interno di un layout XML:

Ricordate, in entrambi gli esempi, di sostituire com.my.namespace con il  namespace utilizzato nella vostra applicazione.

Felice sviluppo!

 

Android SDK: quando Eclipse si blocca su “Resolving error markers” o “Android SDK Content Loader”

Gli sviluppatori Android che non sono ancora passati ad Android Studio e continuano a lavorare su piattaforma Eclipse sono spesso costretti ad avere a che fare con il problema del mancato caricamento del workspace, che solitamente si blocca in conseguenza di uno di questi due task: Android SDK: Resolving error markers…Android SDK Content Loader, che non di rado restano fermi al 0% o al 100% senza dare all’utente la possibilità di interagire con la GUI.

Nella maggior parte dei casi per risolvere questo problema è sufficiente eseguire Eclipse con le opzioni -clean e -refresh nel seguente modo:

Vista la frequenza con cui questo accade è consigliabile creare un batch file apposito. E’ sufficiente dargli un nome (il mio si chiama eclipse.clean.refresh.bat) e inserirlo nella cartella principale di Eclipse:

Quando questo comando non basta è necessario adottare un approccio più aggressivo, eliminando la cache che i componenti dell’SDK creano nella cartella .android situata nel profilo dell’utente corrente. Il batch file diventa quindi il seguente:

Prima di eseguire questi batch file assicuratevi che l’applicazione Eclipse sia chiusa: se necessario, chiudetela in modo forzato tramite Task Manager.

Close