99 votes

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 séparateur ne s'affiche pas. Je suis totalement novice en matière d'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>

0 votes

Quelle version d'Android utilisez-vous ? setDividerDrawable n'existe que depuis l'API 11.

0 votes

Jelly bean 4.2 api 17

0 votes

Si vous avez essayé tout le reste, assurez-vous que le LinearLayout a la bonne orientation. La définition d'une hauteur pour un séparateur avec une orientation horizontale sera très confuse.

231voto

Kapil Vats Points 2201

Utiliser ceci pour un séparateur horizontal

<View
    android:layout_width="1dp"
    android:layout_height="match_parent"
    android:background="@color/honeycombish_blue" />

et ceci pour le séparateur 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 le 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 un séparateur vertical, alors au lieu de android:height="1dp" utilisation en forme android:width="1dp"

Conseil : N'oubliez pas le site android:showDividers article.

3 votes

Merci. Mais comment puis-je ajouter cela à l'attribut "Android:divider" ? En fait, ce que je veux dire, c'est une sorte de moyen automatique d'ajouter le séparateur entre chaque élément ? Je veux dire que ce n'est pas pour cela que l'attribut Android:divider est là ?

0 votes

@death_relic0 Android:divider est disponible pour ListView, Expandable Listview et TabWidget.

9 votes

Merci, mais pourquoi est-il ici alors :s developer.Android.com/reference/Android/widget/

69voto

Shreesha S Points 1351

Essayez ceci, créez un séparateur dans le res/drawable dossier :

diviseur_vertical_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 le 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>

Note : android:divider n'est disponible que sous Android 3.0 (niveau 11 de l'API) ou plus.

0 votes

Mais cela n'ajoutera qu'un seul séparateur si j'ai 10 éléments, ajouter du code supplémentaire pour un séparateur entre chaque élément semble être du gaspillage

0 votes

@death_relic0 Pourquoi ne pas créer une mise en page séparée pour le diviseur et ensuite utiliser la balise include pour l'ajouter n'importe où et autant de fois que vous voulez. Je pense que cela me permettrait de mieux plus et pas de gaspillage.

41voto

khaintt Points 695

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>

Le code ci-dessus crée un séparateur vertical pour LinearLayout

0 votes

J'oublie toujours l'attribut showDividers. Merci !

1 votes

Merci pour le conseil d'utiliser ?Android:listDivider. Je viens de remarquer que cette fonction est invisible à partir de la version 21 de l'API. Dans les versions API inférieures, une petite ligne grise est affichée.

0 votes

@KetanMehta nous allons le définir avec l'attribut 'Android:divider', c'est un dessinable ou une couleur.

3voto

dougc Points 31

Malheureusement, vous devez activer l'affichage des séparateurs à partir 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);

}

0 votes

Bien que ce soit une autre façon de faire, ce n'est pas nécessaire.

2voto

bocekm Points 28

Votre séparateur peut ne pas s'afficher en raison d'un dividerPadding trop important. Vous avez défini 22dip, ce qui signifie que le diviseur est tronqué de 22dip en haut et de 22dip en bas. Si la hauteur de votre mise en page est inférieure ou égale à 44dip, aucun séparateur n'est visible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X