• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

Tutorial: Android Percent Support Library per il layout delle nostre applicazioni Android

By Giuseppe Maggi | on 2 Dicembre 2015 | 0 Comment
Senza categoria

La libreria di supporto del sistema Android è stata recentemente arricchita di un nuovo ramo, la Percent Support Library, che l’ha dotata di un qualcosa che è sempre stato richiesto a gran voce: il dimensionamento delle componenti visuali in percentuale nelle applicazioni Android, proprio come si è abituati a fare nei layout web.

In questo articolo, vedremo la novità al lavoro in un esempio pratico, ma per poterla gustare al meglio facciamo prima un pò di preambolo.

Un pò di background: layout e dimensioni

Quando progettiamo un’interfaccia utente in un’app Android sappiamo che la prima cosa da fare è scegliere quale layout le si addice meglio. Un layout – tanto per ricordare il concetto – è il modo in cui viene gestita la disposizione fisica degli elementi visuali. I più comuni ma non gli unici  che esistono nello sviluppo Android sono:

  • il LinearLayout che dispone gli elementi “linearmente”, da sinistra a destra o dall’alto in basso a seconda che abbia un orientamento orizzontale o verticale;
  • il RelativeLayout, il più flessibile, rende ogni elemento “flottante” e non ci resta che stabilire i rapporti di posizionamento tra il singolo elemento ed il suo contenitore o tra un elemento e l’altro;
  • il FrameLayout destinato a contenere un singolo componente, spesso il segnaposto di un Fragment.

Ciò che accomuna tutti gli elementi grafici in Android – siano essi layout che altri tipi di View – sono i parametri layout_width e layout_height che, rispettivamente, definiscono il modo in cui un componente si estende in larghezza e altezza. Tali dimensioni vanno espresse possibilmente con le costanti wrap_content e match_parent o, quando necessario, con delle dimensioni esplicite in dp, il pixel “virtuale” che si adatta alla densità dello schermo.

Ciò che mancava era un dimensionamento “ufficiale” in percentuale ossia la possibilità di dichiarare: “questo elemento deve essere largo il 30% del suo contenitore”. In alternativa, si poteva fare qualcosa di simile con l’attributo layout_weight che assegnava un peso agli elementi o con un dimensionamento dinamico in Java.

Per sopperire a questa necessità, come detto nell’introduzione, è stata integrata la libreria di supporto con il ramo Percent il quale ha portato con sè due nuovi layout, PercentRelativeLayout e PercentFrameLayout, nonchè gli strumenti necessari per crearne di propri.

Integrare la Percent Support Library

Aggiungerla al proprio progetto Android Studio è molto agevole grazie a Gradle. E’ sufficiente inserire nel nodo dependencies del file build.gradle del modulo la seguente riga:

com.android.support:percent:23.1.0

senza dimenticarsi di sincronizzare il progetto con il pulsante “Sync Project with Gradle Files” androidstudio_syncprojectwithgradle.

Quando Gradle avrà terminato il suo lavoro di aggiornamento le nuove funzionalità saranno disponibili.

L’esempio

L’esempio che tratteremo sarà molto semplice ma mostrerà rapidamente in cosa consiste la novità.

La figura seguente mostra un’interfaccia piuttosto elementare in cui due TextView indicano la larghezza e l’altezza in pixel del display (misurate con quanto offre la classe DisplayMetrics) e due pulsanti modellati con le nuove dimensioni in percentuale: uno largo il 50% del contenitore ed uno l’80.
androidpercentsupportlibrary_01

 

Questo il layout formattato in XML:

<android.support.percent.PercentRelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:context=".MainActivity">

        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/dimensioni">
            <TableRow>
                <TextView
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="Larghezza (pixel)"/>
                <TextView
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/txt_larghezzapx"/>
            </TableRow>
            <TableRow>
                <TextView
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="Altezza (pixel)"/>
                <TextView
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/txt_altezzapx"/>
            </TableRow>

        </TableLayout>

        <Button
            app:layout_widthPercent="50%"
            android:layout_height="wrap_content"
            android:text="Larghezza 50%"
            android:layout_centerHorizontal="true"
            android:layout_below="@id/dimensioni"
            android:layout_marginTop="20dp"
            android:id="@+id/button50"
            android:onClick="showDimension"/>

        <Button
            app:layout_widthPercent="80%"
            android:layout_height="wrap_content"
            android:text="Larghezza 80%"
            android:layout_centerHorizontal="true"
            android:layout_below="@id/button50"
            android:layout_marginTop="20dp"
            android:onClick="showDimension"/>


    </android.support.percent.PercentRelativeLayout>

Impieghiamo il nuovo PercentRelativeLayout all’interno del quale siamo messi in condizione di usare dimensionamenti in percentuale. Lo abbiamo fatto impostando a 50% e 80% gli attributi layout_widthPercent presenti in entrambi i pulsanti in sostituzione del classico layout_width.  Quest’ultimo, come ben sappiamo, è obbligatorio in qualunque componente, insieme a layout_heigth, tanto che, nella scrittura del codice, Android Studio ne segnala la mancanza permettendo tuttavia di portare a termine il build dell’applicazione con successo.

Entrambi i pulsanti, al click, provocheranno l’invocazione del metodo showDimension presente nella MainActivity il quale non farà altro che mostrare in una SnackBar la dimensione effettiva del pulsante che, a seconda dei casi, sarà proprio il 50% o l’80% della larghezza del display.

La figura seguente mostra l’istante immediatamente successivo alla pressione del pulsante con etichetta “Larghezza 80%” il quale è largo l’80% di 480.
androidpercentsupportlibrary_03

Nella visualizzazione landscape il valore che prima era l’altezza ora rappresenta la larghezza ma il funzionamento è il medesimo. Premendo il pulsante “Larghezza 50%” il messaggio nella Snackbar ci dimostra che è largo la metà di 800 px.
androidpercentsupportlibrary_02
Quello che segue è il codice dell’Activity che risulta nel complesso molto semplice: nell’onCreate vengono inizializzate le TextView e la Toolbar mentre il metodo showDimension non fa altro che dirci quanto il pulsante toccato è largo.

public class MainActivity extends AppCompatActivity {

    private DisplayMetrics metrics;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);

        TextView txt= (TextView) findViewById(R.id.txt_larghezzapx);
        txt.setText(Integer.toString(metrics.widthPixels));

        txt= (TextView) findViewById(R.id.txt_altezzapx);
        txt.setText(Integer.toString(metrics.heightPixels));

    }

    public void showDimension(View v)
    {
        Snackbar.make(v, "Larghezza del pulsante: "+v.getWidth()+" px", 
                   Snackbar.LENGTH_LONG).show();
    }

}

Altri aspetti

Oltre a quello che abbiamo visto si possono impostare altri aspetti: l’altezza con layout_heightPercent ma anche tutti i margini possibili a seconda che parliamo di PercentFrameLayout o PercentRelativeLayout. La versione 23.1 della libreria di supporto ha aggiunto anche l’attributo layout_aspectRatio che permette di impostare un rapporto fisso tra le due grandezze (larghezza o altezza) così che una di esse sia dichiarata esplicitamente e l’altra ne sia tratta di conseguenza.

Chiunque abbia programmato in Android sinora non può non aver notato la mancanza di una soluzione simile nell’ambito dei layout pertanto sperimentarla è d’obbligo e, come si è visto, basta approntare velocemente alcuni pulsanti per valutarne l’efficacia.

Alla prossima!

Share this story:
  • tweet

Tags: android developersandroid user experiencedesign user interface androidmobile developersTutorial Pratici

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • Android: usare Connect Pattern

    10 Luglio 2018 - 0 Comment
  • Android Fragments: sperimentiamo il ciclo di vita

    21 Maggio 2018 - 0 Comment
  • Android: capire il funzionamento dei Fragment

    5 Ottobre 2017 - 0 Comment

Author Description

No Responses to “Tutorial: Android Percent Support Library per il layout delle nostre applicazioni Android”

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO