web-dev-qa-db-fra.com

Comment ajouter un séparateur (vertical) à un LinearLayout horizontal?

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>
80
Ahmed-Anas

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.

193
Kapil Vats

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. 

65
Shreesha S

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

33
khaintt

Mise à jour: pré-Honeycomb utilisant AppCompat

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!

15
Rolf ツ

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.

8

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

}
4
dougc

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">
4
Amilcar Andrade

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.

1
bocekm

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>
0
Ionut Negru

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

0
Dmitry Zaytsev

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.

0
android developer

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. 

0
itsrajesh4uguys