web-dev-qa-db-fra.com

Comment spécifier l'espacement entre les éléments de LinearLayout une seule fois?

J'ai récemment rencontré à nouveau un problème que j'avais déjà plusieurs fois au cours des dernières années. 

LinearLayout est un layout manager très pratique. Mais ce qui me manque totalement, c’est la possibilité d’ajouter un certain espace entre les éléments (comme le remplissage) dans une seule balise XML. 

Ce que je veux dire par une balise est que je peux définir dans la déclaration de LinearLayout l'espacement entre les éléments (par exemple, dans une LinearLayout verticale l'espace vertical entre deux éléments de cette présentation). 

Je sais que je peux le faire en ajoutant la balise XML Android:layout_marginTop ou quelque chose de similaire à chaque élément de LinearLayout. 

Mais j'aimerais pouvoir le définir en un seul point, car l'espacement est le même pour tous les éléments. 

Est-ce que quelqu'un connaît un moyen facile de faire cela (ne pas implémenter un LinearLayout personnalisé ou quelque chose comme ça)? Je préfère une solution qui fonctionne directement en XML sans avoir besoin de codage.

17
Dude

la méthode recommandée consiste à appliquer un style à tous les éléments de la mise en page linéaire 

Android:style="@style/mystyle"

<style name="mystyle">
      <item name="Android:layout_marginTop">10dp</item>
      ... other things that your elements have in common
</style>
18
chris-tulip

Définissez le dessin personnalisable transparent comme séparateur pour votre mise en page:

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

Nouvelle ressource drawable dans le dossier drawables (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>
4
Zon

La réponse de @ Chris-Tulip m'a vraiment aidé - avec de bonnes pratiques aussi.

Pour ceux d'entre vous qui risquent de recevoir une erreur Eclipse suite à la perte d'un identifiant de ressource pour "Style" dans le package Android, comme je l'ai fait, vous n'avez pas besoin d'ajouter l'espace de noms Android. 

Ainsi, Android: style = "xx" renvoie l’erreur, alors que style = "xx" est correct. Génial, mais pour quiconque ayant cette erreur, cela pourrait aider.

1
Watercayman

Vous devez ajouter Android:layout_marginTop ou Android:layout_marginLeft à un élément qui doit avoir un retrait. Dépend du Android:orientation de votre LinearLayout.

0
Iurii

Vous pouvez définir votre "prototype" d'élément unique dans un fichier xml séparé, puis gonfler les éléments de ce fichier, de manière dynamique dans le code et les insérer dans votre présentation linéaire.

Vous définiriez ensuite l'espacement sur l'élément réel, et non le parent LinearLayout (comme un Android:layout_marginTop par exemple), et cet espacement serait appliqué à tous vos éléments lorsque vous les gonflerez.

MODIFIER:

conteneur.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);

Je n'ai pas fait d'effort pour tester le code, mais cela "devrait" fonctionner tel quel :-)

0
dbm