Autore Topic: Layout e DP  (Letto 1034 volte)

Offline crc_error

  • Utente junior
  • **
  • Post: 85
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Windows 8, Ubuntu 12
Layout e DP
« il: 20 Maggio 2013, 10:52:50 CEST »
0
Ciao a tutti,
sto cercando di capire come Android disegna la grafica e i layout.
(Non sono sicuro sia la sezione giusta, ma le domande riguardano sia i layout che i drawable...)

Quello che mi spiazza è che non riesco bene come funzionano i density pixel.

Per capire come funzionano vorrei fare un layout così:



Dove i blocchi bianchi sono view e quelli colorati sono immagini.
Come faccio a sapere di quanti px e quindi dp, le mie immagini dovranno essere in modo che occupino la metà dello schermo? (senza che vengano deformate naturalmente)
Se volessi usare un layout fisso, di quanti dp dovrebbero essere bottoni e image view in modo che stiano affiancate su uno schermo mdpi? e su uno hdpi?

Per il layout ho risolto così:

Codice (XML): [Seleziona]
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/tblFragDati"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:layout_margin="16dp"
   android:weightSum="1" >

    <TableRow
       android:id="@+id/trFragDatiTop"
       android:layout_width="match_parent"
       android:layout_height="0dp"
       android:layout_weight="0.4" >

        <LinearLayout
           android:layout_width="0dp"
           android:layout_height="match_parent"
           android:layout_weight="0.5"
           android:orientation="vertical" >

            <Button
               android:id="@+id/button1"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:text="Button" />

        </LinearLayout>

        <LinearLayout
           android:layout_width="0dp"
           android:layout_height="match_parent"
           android:layout_weight="0.5"
           android:orientation="vertical">

            <ImageView
               android:id="@+id/imageView1"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:src="@drawable/immagine" />

        </LinearLayout>
    </TableRow>

    ................

Ma è non il metodo migliore, in particolare perchè ho 2 linear layout usati solo per la loro proprietà "layout_weight".. ne esiste uno migliore?


Grazie in anticipo





« Ultima modifica: 20 Maggio 2013, 11:00:10 CEST da crc_error, Reason: mancava un "non" »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Layout e DP
« Risposta #1 il: 20 Maggio 2013, 11:01:01 CEST »
0
Prima di scendere nello specifico di un layout, ti conviene leggerti la filosofia alla base dei layout di android e alcune nozioni comuni che dovrebber chiarirti il 90% dei dubbi.

Devices and Displays | Android Developers
Metrics and Grids | Android Developers
Supporting Multiple Screens | Android Developers
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline crc_error

  • Utente junior
  • **
  • Post: 85
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Windows 8, Ubuntu 12
Re:Layout e DP
« Risposta #2 il: 20 Maggio 2013, 11:11:21 CEST »
0
Ciao, li ho letti.. ma non ci ho capito poco...

Per esempio se ho aperto Gimp e devo esportare una immagine in modo che occupi metà di schermo mdpi in lunghezza e in larghezza quanti px dovrà essere?

Considerando che mdpi, ldpi, ecc.. sono "gruppi" di DP non esiste una sola risposta giusto?

Per esempio, su uno schermo mdpi con 160dpi dove 1 px == 1 dp, un'immagine di 80px di larghezza dovrebbe occupare la metà dello schermo giusto?
Ma su uno schermo sempre mdpi ma con 167dpi? Qui 1 px == 1,04375 dp quindi l'immagine verrà leggermente deformata giusto?

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Layout e DP
« Risposta #3 il: 20 Maggio 2013, 15:11:39 CEST »
0
Ciao, li ho letti.. ma non ci ho capito poco...

Per esempio se ho aperto Gimp e devo esportare una immagine in modo che occupi metà di schermo mdpi in lunghezza e in larghezza quanti px dovrà essere?

Considerando che mdpi, ldpi, ecc.. sono "gruppi" di DP non esiste una sola risposta giusto?

Per esempio, su uno schermo mdpi con 160dpi dove 1 px == 1 dp, un'immagine di 80px di larghezza dovrebbe occupare la metà dello schermo giusto?
Ma su uno schermo sempre mdpi ma con 167dpi? Qui 1 px == 1,04375 dp quindi l'immagine verrà leggermente deformata giusto?
solitamente in questi casi si fa un'immagine che vada bene per gli mdpi medi (quindi attorno ai 160 dp) e poi si fanno le immagini hdpi ldpi xhdpi ecc in base al rapporto (se non sbaglio ldpi=0.75*mdpi, hdpi=1.5*mdpi ecc).
Poi le immagini le metti impostando il flag center inside in tal modo si occupa android di inserire l'immagine tua dentro il layout occupando piu spazio possibile del layout stesso.
per quanto riguarda il tuo caso specifico, io userei una gridview con column=2 se hai tante righe, oppure una serie di linear layout orizzontali con weight_sum=2 con al loro interno due layout/view con layout_weight=1
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline crc_error

  • Utente junior
  • **
  • Post: 85
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Windows 8, Ubuntu 12
Re:Layout e DP
« Risposta #4 il: 20 Maggio 2013, 15:27:43 CEST »
0
perfetto ho capito...

Per il layout intendi una cosa così:

> linearlayout=verticale
> > linearlayout=orizzontale
> > >imageview/button
> > linearlayout=orizzontale
> > >imageview/button
> > linearlayout=orizzontale
> > >imageview/button

Nel gridview invece è possibile aggiungere un layout?
Cioè in ogni "cella" è possibile aggiungere per esempio un linearlayout verticale o orizzontale per allineare 2 view?

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Layout e DP
« Risposta #5 il: 20 Maggio 2013, 16:32:56 CEST »
+1
si, quello è quello che intendevo se hai poche righe.

per la gridview, sostanzialmente lavora come una listview, ha il suo adapter con il metodo getView, in cui puoi fare anche il riciclo delle view/inflate di nuove view.
Il tutto dipende da quante righe hai, se ne hai 5-6-10 puoi anche non sbatterti e usare il linear semplice, ma se le view sono anche 100 o possono aumentare dinamicamente, io mi sbatterei un po a capire le gridview, gli adapter e userei quello.
per farti capire, il playstore usa listview per device piccoli (telefoni) e gridview per device grandi (tablet)
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline crc_error

  • Utente junior
  • **
  • Post: 85
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Windows 8, Ubuntu 12
Re:Layout e DP
« Risposta #6 il: 20 Maggio 2013, 23:05:40 CEST »
0
Scusa per il ritardo..

Grazie per la risposta! Il playstore intendi le activity con le liste delle app?


Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Layout e DP
« Risposta #7 il: 21 Maggio 2013, 00:08:14 CEST »
0
Scusa per il ritardo..

Grazie per la risposta! Il playstore intendi le activity con le liste delle app?
esatto!
se cerchi c'era un post su google plus che spiegava questa cosa!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline crc_error

  • Utente junior
  • **
  • Post: 85
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Windows 8, Ubuntu 12
Re:Layout e DP
« Risposta #8 il: 21 Maggio 2013, 09:26:14 CEST »
0
Grazie ancora!

Ps. ultima domandina... con google invece non esiste la possibilità di creare layout fluidi giusto?

Cioè un layout contenitore che permette di allineare sotto-layout di dimensione fissa tutti a sinistra o destra fino a che c'è spazio e poi creare una nuova riga.

Una cosa così



Dovei il blocco bianco è lo schermo e i blocchi colorati sono dei layout allineati a destra uno dell'altro.
Quando lo spazio sullo schermo finisce, il blocco giallo va a capo.

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Layout e DP
« Risposta #9 il: 21 Maggio 2013, 09:30:19 CEST »
0
devi farti un custom layout, mi pare che sul libro di Massimo Carli ci fosse un esempio.
In java si chiama flow layout, googla un po e vedi se qualcuno l'ha già fatto!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline crc_error

  • Utente junior
  • **
  • Post: 85
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    LG-P500
  • Sistema operativo:
    Windows 8, Ubuntu 12
Re:Layout e DP
« Risposta #10 il: 21 Maggio 2013, 09:31:16 CEST »
0
Grazie ancora ;)