Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [Android] Adattare dimensioni e posizione oggetti a seconda delle dimensioni dello schermo

    Ciao, la mia app funziona perfettamente.
    Oggi volevo provarla su un tablet di 10 pollici e come mi aspettavo le dimensioni dei vari oggetti del form non si adattavano alla dimensioni dello schermo. (La progettazione l'avevo fatto per uno schermo da 3.7'')

    Ho iniziato cercando di modificare le dimensioni degli oggetti in questo modo:
    codice:
        
    protected void onStart(){       
        super.onStart();
        final ListView lista = (ListView) findViewById(R.id.list);
        scala(lista, 140, 120);
    }
    dove scala è definito così:
    codice:
        public void scala(ListView widget, int w, int h) 
        {
            DisplayMetrics metrics = getResources().getDisplayMetrics();
            int deviceWidth = metrics.heightPixels;
            int deviceHeight = metrics.widthPixels;
            
            float widthInPercentage =  ( (float) w / deviceWidth  )  * 100; 
            float heightInPercentage =  ( (float) h / deviceHeight ) * 100; 
            int mLayoutWidth = (int) ( (widthInPercentage * deviceWidth) / 100 );
            int mLayoutHeight = (int) ( (heightInPercentage * deviceHeight) / 100 );
    
    
            LayoutParams layoutParams = new LayoutParams(mLayoutWidth, mLayoutHeight);
            widget.setLayoutParams(layoutParams);
        }
    Succede che una volta usciti dal metodo scala, il programma crasha e da questo errore:
    "RelativeLayout$DependencyGraph.findRoots(int[]) line: 1303
    Dove sbaglio?
    Inoltre, per quanto riguarda le posizioni degli oggetti cosa devo fare per fare in modo che relativamente alle dimensioni dello schermo si adattino? (Tipo se un certo bottone ha coordinata x pari a larghezza schermo/3 e coordinata y pari a altezza/3)

    Grazie in anticipo a chi mi aiuterà

  2. #2
    Ciao, non sono esperto sulla programmazione Android, tuttavia quando lessi la documentazione relativa alla versione 4+ arrivai al capitolo dove veniva spiegato come creare una interfaccia. Ricordo che basta settare la quantità di spazio che quell'oggetto dovrà avere in una determinata riga per far calcolare (automaticamente) al SO la lunghezza in pixel necessaria da assegnare... Utilizzando questo metodo non hai bisogno di fare particolari calcoli e la tua APP è pronta ad adattarsi a qualsiasi schermo.

    Scusami se sono stato molto vago, se il tuo intendo è quello di creare una nuova APP probabilmente questo commento ti sarà utile, ciao ciao
    Andrea

  3. #3
    1) Impara ad utilizzare il RelativeLayout per posizionare gli oggetti all'interno dell'Activity.

    2) Nella cartella delle risorse ci sono varie sottocartelle per ogni tipo di risorsa. In particolare ci sono varie sottocartelle "drawable", (standard, hdpi, xhdpi, xxhdpi, ecc... in ordine crescente insomma) ognuna delle quali si riferisce ad un determinato dpi. La stessa risorsa devi averla in ognuna di queste cartelle, opportunamente dimensionata.

  4. #4
    Quote Originariamente inviata da Javino89 Visualizza il messaggio
    1) Impara ad utilizzare il RelativeLayout per posizionare gli oggetti all'interno dell'Activity.

    2) Nella cartella delle risorse ci sono varie sottocartelle per ogni tipo di risorsa. In particolare ci sono varie sottocartelle "drawable", (standard, hdpi, xhdpi, xxhdpi, ecc... in ordine crescente insomma) ognuna delle quali si riferisce ad un determinato dpi. La stessa risorsa devi averla in ognuna di queste cartelle, opportunamente dimensionata.
    Quindi in sostanza dovrei creare un layout per ogni cartella drawable?

  5. #5
    No, il layout è sempre quello. Ogni activity ha il suo, no? E ti consiglio di utilizzare il RelativeLayout:

    http://developer.android.com/referen...iveLayout.html

    Premetto che utilizzo Android Studio invece che Eclipse. Cerco comunque di spiegarmi meglio. Ogni risorsa può essere specializzata in base a precise caratteristiche del dispositivo che andrà ad eseguire l'applicazione. Quelle sigle dopo "drawable" che ho scritto prima si chiamano "qualificatori" e fanno riferimento alla risoluzione del display.

    Varie risoluzioni possibili:
    - mdpi
    - hdpi
    - xhdpi
    - xxhdpi
    Rispettivamente media, alta, altissima ed extra altissima risoluzione del display. All'interno di ogni cartella drawable con il suo opportuno qualificatore devi inserire immagini della stessa risoluzione. La stessa immagine dovrà avere una risoluzione diversa in cartelle drawable con qualificatori che fanno riferimento a risoluzioni diverse di display. Se inserisci risorse opportunamente create per la risoluzione xhdpi ed il dispositivo è dotato di una risoluzione inferiore (ad es hdpi o mdpi), il dispositivo si vedrà costretto ad effettuare operazioni di resize e adattamento dispendiose, che porterebbero risultati non ottimali. Quindi ripeto, la stessa risorsa (ad esempio l'icona dell'applicazione), devi crearla più volte per ogni risoluzione e mettere ognuna di queste immagini nella loro giusta cartella drawable. Più versioni crei e più dispositivi riuscirai a supportare.

  6. #6
    Quote Originariamente inviata da Javino89 Visualizza il messaggio
    No, il layout è sempre quello. Ogni activity ha il suo, no? E ti consiglio di utilizzare il RelativeLayout:

    http://developer.android.com/referen...iveLayout.html

    Premetto che utilizzo Android Studio invece che Eclipse. Cerco comunque di spiegarmi meglio. Ogni risorsa può essere specializzata in base a precise caratteristiche del dispositivo che andrà ad eseguire l'applicazione. Quelle sigle dopo "drawable" che ho scritto prima si chiamano "qualificatori" e fanno riferimento alla risoluzione del display.

    Varie risoluzioni possibili:
    - mdpi
    - hdpi
    - xhdpi
    - xxhdpi
    Rispettivamente media, alta, altissima ed extra altissima risoluzione del display. All'interno di ogni cartella drawable con il suo opportuno qualificatore devi inserire immagini della stessa risoluzione. La stessa immagine dovrà avere una risoluzione diversa in cartelle drawable con qualificatori che fanno riferimento a risoluzioni diverse di display. Se inserisci risorse opportunamente create per la risoluzione xhdpi ed il dispositivo è dotato di una risoluzione inferiore (ad es hdpi o mdpi), il dispositivo si vedrà costretto ad effettuare operazioni di resize e adattamento dispendiose, che porterebbero risultati non ottimali. Quindi ripeto, la stessa risorsa (ad esempio l'icona dell'applicazione), devi crearla più volte per ogni risoluzione e mettere ognuna di queste immagini nella loro giusta cartella drawable. Più versioni crei e più dispositivi riuscirai a supportare.
    Ok, ma il mio problema non è il posizionamento/dimensioni di un immagine.
    Esattamente con RelativeLayout ti riferisci a RelativeLayout.LayoutParams o alla progettazione del file layout.xml?

  7. #7
    Mi riferisco alla progettazione del layout.xml

  8. #8
    Ci stavo provando precedentemente ma non con scarsi risultati

  9. #9
    Allora riprovaci nuovamente, non è difficile, devi posizionare gli elementi ognuno relativo alla posizione di un altro o allo schermo.

  10. #10
    il fatto è che se io pongo un oggetto a una distanza specificata in dp al variare della risoluzione la distanza che avevo settato rimane invariata, invece vorrei che si spostasse in proporzione alla dimensioni.
    l'ideale sarebbe lavorare in termini di percentuale

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.