J'essaie d'ajouter un séparateur à une mise en page linéaire horizontale, mais je n'arrive à rien. Le diviseur ne montre tout simplement pas. Je suis un débutant total avec Android.
Voici ma mise en page XML:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity" >
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:id="@+id/llTopBar"
Android:orientation="horizontal"
Android:divider="#00ff00"
Android:dividerPadding="22dip"
Android:showDividers="middle"
>
<Button
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:text="asdf" />
<Button
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:text="asdf"
/>
</LinearLayout>
</RelativeLayout>
utiliser ceci pour diviseur horizontal
<View
Android:layout_width="1dp"
Android:layout_height="match_parent"
Android:background="@color/honeycombish_blue" />
et ceci pour diviseur vertical
<View
Android:layout_width="match_parent"
Android:layout_height="1dp"
Android:background="@color/honeycombish_blue" />
OU si vous pouvez utiliser le diviseur LinearLayout, pour un diviseur horizontal
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<size Android:height="1dp"/>
<solid Android:color="#f6f6f6"/>
</shape>
et dans LinearLayout
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:divider="@drawable/divider"
Android:orientation="vertical"
Android:showDividers="middle" >
Si vous voulez utiliser le diviseur vertical, utilisez Android:height="1dp"
à la place de Android:width="1dp"
dans la forme
Conseil: N'oubliez pas l'élément Android:showDividers
.
Essayez ceci, créez un séparateur dans le dossier res/drawable
:
vertical_divider_1.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<size Android:width="1dip" />
<solid Android:color="#666666" />
</shape>
Et utilisez l'attribut divider
dans LinearLayout comme ceci:
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="48dp"
Android:orientation="horizontal"
Android:divider="@drawable/vertical_divider_1"
Android:dividerPadding="12dip"
Android:showDividers="middle"
Android:background="#ffffff" >
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Button" />
<Button
Android:id="@+id/button2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Button" />
</LinearLayout>
Remarque: Android:divider
est uniquement disponible dans Android 3.0 (API niveau 11) ou supérieur.
Il est facile d'ajouter un séparateur à la mise en page, nous n'avons pas besoin d'une vue séparée.
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:divider="?android:listDivider"
Android:dividerPadding="2.5dp"
Android:orientation="horizontal"
Android:showDividers="middle"
Android:weightSum="2" ></LinearLayout>
Code ci-dessus, séparateur vertical pour LinearLayout
Si vous utilisez la bibliothèque AppCompat v7, vous souhaiterez peut-être utiliser la vue LinearLayoutCompat
. En utilisant cette approche, vous pouvez utiliser des séparateurs amovibles sur Android 2.1, 2.2 et 2.3.
Exemple de code:
<Android.support.v7.widget.LinearLayoutCompat
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
app:showDividers="middle"
app:divider="@drawable/divider">
drawable/divider.xml: (diviseur avec un rembourrage en haut et en bas)
<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:insetBottom="2dp"
Android:insetTop="2dp">
<shape>
<size Android:width="1dp" />
<solid Android:color="#FFCCCCCC" />
</shape>
</inset>
Remarque très importante: La vue LinearLayoutCompat
ne s'étend pas de LinearLayout
et vous ne devez donc pas utiliser les propriétés Android:showDividers
ou Android:divider
mais celles personnalisées: app:showDividers
et app:divider
. Dans le code, vous devez également utiliser le LinearLayoutCompat.LayoutParams
et non le LinearLayout.LayoutParams
!
Je viens de rencontrer le même problème aujourd'hui. Comme l'indiquent les réponses précédentes, le problème provient de l'utilisation d'une couleur dans la balise de séparation, plutôt que d'un dessin. Cependant, au lieu d’écrire mon propre fichier XML dessiné, je préfère utiliser autant que possible les attributs thématiques. Vous pouvez utiliser Android: attr/dividerHorizontal et Android: attr/dividerVertical pour obtenir un dessin prédéfini à la place:
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:showDividers="middle"
Android:divider="?android:attr/dividerVertical"
Android:orientation="horizontal">
<!-- other views -->
</LinearLayout>
Les attributs sont disponibles dans les API 11 et supérieures.
De plus, comme mentionné par bocekm dans sa réponse, la propriété dividerPadding N'ajoute pas de remplissage supplémentaire de chaque côté d'un séparateur vertical, comme on pourrait le supposer. Au lieu de cela, il définit le remplissage supérieur et inférieur et peut donc tronquer le séparateur s'il est trop grand.
Frustrement, vous devez activer l'affichage des séparateurs du code dans votre activité. Par exemple:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the view to your layout
setContentView(R.layout.yourlayout);
// Find the LinearLayout within and enable the divider
((LinearLayout)v.findViewById(R.id.llTopBar)).
setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
}
Vous pouvez utiliser le diviseur intégré, cela fonctionnera pour les deux orientations.
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:divider="?android:attr/listDivider"
Android:orientation="horizontal"
Android:showDividers="middle">
Votre diviseur peut ne pas apparaître en raison d'un trop grand dividerPadding. Vous définissez 22dip, cela signifie que le diviseur est tronqué par 22dip du haut et par 22dip du bas. Si votre hauteur de mise en page est inférieure ou égale à 44dip, aucun séparateur n'est visible.
Si la réponse de Kapil Vats ne fonctionne pas, essayez quelque chose comme ceci:
drawable/divider_horizontal_green_22.xml
<size Android:width="22dip"/>
<solid Android:color="#00ff00"/>
</shape>
layout/your_layout.xml
LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:id="@+id/llTopBar"
Android:orientation="horizontal"
Android:divider="@drawable/divider_horizontal_green_22"
Android:showDividers="middle"
>
J'ai rencontré un problème où l'attribut padding ne fonctionnait pas. J'ai donc dû définir la hauteur du diviseur directement dans le diviseur.
Remarque:
Si vous souhaitez l'utiliser dans LinearLayout vertical, créez-en un nouveau, comme suit: drawable/divider_vertical_green_22.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:Android="http://schemas.Android.com/apk/res/Android">
<size Android:height="22dip"/>
<solid Android:color="#00ff00"/>
</shape>
Pour pouvoir être tracé, le séparateur de LinearLayout
doit avoir une certaine hauteur alors que ColorDrawable
(qui est essentiellement #00ff00
ainsi que toute autre couleur codée en dur) n’a pas. Une façon simple (et correcte) de résoudre ce problème consiste à envelopper votre couleur dans une Drawable
avec une hauteur prédéfinie, telle que shape
drawable
Vous pouvez utiliser IcsLinearLayout, tel qu'il est utilisé dans la bibliothèque ActionBarSherlock, ou utiliser l'API normale disponible sur ICS (ou copier son code).
EDIT: vous pouvez également utiliser LinearLayoutICS comme utilisé dans la bibliothèque de support. J'ai écrit un article à ce sujet here .
Vous pouvez utiliser la même technique pour créer le dessin comme indiqué ici , ou créer un dessin à 9 patchs.
Vous devez créer une vue quelconque pour séparer, comme textview ou imageview, puis définir l’arrière-plan pour que si vous avez une image, utilisez la couleur comme arrière-plan.
J'espère que cela vous aide.