/ / Comment spécifier l'espacement entre les éléments de LinearLayout une seule fois? - android, android-layout, android-widget, android-linearlayout

Comment spécifier l'espacement entre les éléments de LinearLayout une seule fois? - android, android-layout, android-widget, android-linearlayout

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 très pratique layout manager. 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 étiquette est que je peux définir dansla déclaration de LinearLayout sur l’espacement entre les éléments (par exemple, dans un LinearLayout vertical, l’espace vertical entre deux éléments de cette structure).

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.

Réponses:

18 pour la réponse № 1

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>

3 pour la réponse № 2

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>

1 pour la réponse № 3

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 concernant l’absence 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.

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


0 pour la réponse № 4

Vous devriez ajouter android:layout_marginTop ou android:layout_marginLeft à l'élément qui doit avoir le retrait. Dépend de android:orientation de votre LinearLayout.


0 pour la réponse № 5

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éfinirez ensuite l’espacement sur l’article réel, et non sur le parent LinearLayout (en tant que android:layout_marginTop par exemple) et que l’espacement serait appliqué à tous vos articles lorsque vous les gonflez.

MODIFIER:

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

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