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.
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>
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>
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.
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
.
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 :-)