15

Recentemente mi sono imbattuto in un problema che ho già avuto più volte negli ultimi anni.Come specificare la spaziatura tra gli elementi di LinearLayout solo una volta?

LinearLayout è molto conveniente layout manager. Ma quello che mi manca è la possibilità di aggiungere un certo spazio tra gli elementi (come il padding) in un singolo tag XML.

Ciò che intendo per un tag è che posso definire nella dichiarazione di LinearLayout la spaziatura tra gli elementi (ad esempio in un LinearLayout verticale lo spazio verticale tra due elementi in questo layout).

So che posso farlo aggiungendo il tag XML android:layout_marginTop o qualcosa di simile a ogni elemento nel LinearLayout.

Ma mi piacerebbe poterlo definire in un solo punto, poiché la spaziatura è la stessa per tutti gli elementi.

Qualcuno conosce un modo semplice per farlo (non implementando un LinearLayout personalizzato o qualcosa del genere)? Preferisco una soluzione che funzioni direttamente in XML senza bisogno di codifica.

+0

grazie @Shrikant. – Dude

+0

siete i benvenuti :) – Shrikant

+1

Per qualsiasi altra ricerca di una [soluzione a posto singolo] (http://stackoverflow.com/a/18538656/923340). –

risposta

18

il modo che è raccomandato è quello di applicare uno stile a tutti gli elementi di il layout lineare

android:style="@style/mystyle" 

<style name="mystyle"> 
     <item name="android:layout_marginTop">10dp</item> 
     ... other things that your elements have in common 
</style> 
+0

Grazie a @MrFox. Questo è il tipo di soluzione che stavo cercando. – Dude

+0

contento di aver potuto aiutare =) –

+2

Ho la stessa domanda dell'OP. Tuttavia, non sono sicuro di come questo approccio compia ciò che sto cercando. Ad esempio, se ho 10 visualizzazioni di testo all'interno del mio LinearLayout e voglio una spaziatura di 10dp tra tutti loro, mi piacerebbe poter specificare in un unico luogo l'impostazione 10dp. Se definisco uno stile come nel tuo esempio, devo ancora applicare questo stile a tutte e 10 le visualizzazioni di testo. Mi sto perdendo qualcosa qui? – AngieM

0

È possibile definire il proprio singolo oggetto "prototipo" in un file xml separato e quindi gonfiare gli elementi da tale file, in modo dinamico nel codice e inserirli nel layout lineare.

Si definirà quindi la spaziatura sull'elemento reale, non su LinearLayout padre (ad esempio android:layout_marginTop) e tale spaziatura verrà applicata a tutti gli elementi durante il gonfiaggio.

EDIT:

container.xml:

<LinearLayout 
    android:id="@+id/parent" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <!-- Your items will be added here --> 

</LinearLayout> 

item.xml:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="4dp"> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="This is my child" /> 

</LinearLayout> 

MyActivity.java:

// Put this in a suitable place in your Java code, perhaps 
// in "onCreate" or "onResume" depending on where and how 
// you initialize your view. You can, of course inflate 
// any number of instances of the item and add them to 
// your parent LinearLayout. 
LayoutInflater inflater = LayoutInflater.from(context); 
View item = inflater.inflate(R.layout.item, null, false); 

LinearLayout container = findViewById(R.id.parent); 
container.addView(view); 

non ho messo uno sforzo in fase di test del codice, ma si "dovrebbe" lavoro come è :-)

+0

Grazie dbm. Grazie per il bel esempio di codice. Preferirei una soluzione che funzioni direttamente in XML, ma se non viene trovata una soluzione migliore, sceglierò la tua come risposta. – Dude

+0

Capisco. Sfortunatamente non conosco una soluzione puramente XML. – dbm

+1

Non utilizzare mai 5dp in Android. Usa sempre 4, 8, 16, 32, 48 dp. http://developer.android.com/design/style/metrics-grids.html – Fred

1

@ La risposta di Chris-Tulip mi ha davvero aiutato, anche con le buone pratiche.

Per quelli di voi che potrebbero avere un errore di Eclipse sulla mancanza di un identificatore di risorsa per "Stile" nel pacchetto android, come ho fatto io, non è necessario aggiungere lo spazio dei nomi di Android.

Quindi, android: style = "xx" visualizza l'errore, mentre style = "xx" è corretto. Funky, ma per chiunque abbia quell'errore, questo potrebbe aiutare.

0

È necessario aggiungere android:layout_marginTop o android:layout_marginLeft all'elemento che deve avere il rientro. Dipende dallo android:orientation del numero LinearLayout.

3

Impostare drawable trasparente personalizzato come un divisore per il layout:

<LinearLayout 
    android:showDividers="middle" 
    android:divider="@drawable/divider"> 

Nuova risorsa drawable nella cartella drawable (divider.xml):

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android = "http://schemas.android.com/apk/res/android"> 
    <size 
    android:width = "0dp" 
    android:height = "16dp"/> 
</shape> 
Problemi correlati