Ligne de séparation/diviseur de dessin Android dans la mise en page?
je voudrais tracer une ligne droite au milieu d'une mise en page et l'utiliser comme un séparateur d'autres éléments comme les TextView. Est-il un bon widget pour cela. Je ne veux pas vraiment utiliser une image car il serait difficile d'y associer les autres composants. Et je veux qu'elle soit aussi relativement bien positionnée. Merci
30 réponses
j'utilise habituellement ce code pour ajouter la ligne horizontale:
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>
pour ajouter un séparateur vertical, commuter les layout_width
et layout_height
valeurs
pour améliorer les réponses fournies par Alex Kucherenko et Dan Dar3
j'ai ajouté ceci à mes styles:
<style name="Divider">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">1dp</item>
<item name="android:background">?android:attr/listDivider</item>
</style>
puis dans Mes layouts est moins de code et plus simple à lire.
<View style="@style/Divider"/>
ajouter ceci dans votre mise en page où vous voulez le divider (modifier les attributs pour correspondre à votre besoin):
<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@android:drawable/divider_horizontal_dark"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingBottom="2dp"
android:paddingTop="2dp" />
vous pouvez l'utiliser dans LinearLayout
:
android:divider="?android:dividerHorizontal"
android:showDividers="middle"
Par Exemple:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="?android:dividerHorizontal"
android:showDividers="middle"
android:orientation="vertical" >
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="abcd gttff hthjj ssrt guj"/>
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="abcd"/>
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="abcd gttff hthjj ssrt guj"/>
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="abcd"/>
</LinearLayout>
<TextView
android:id="@+id/line"
style="?android:attr/listSeparatorTextViewStyle"
android:paddingTop="5dip"
android:gravity="center_horizontal"
android:layout_below="@+id/connect_help"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#000" />
utilisez ce code. Il aidera
<LinearLayout
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="1"
android:divider="?android:dividerHorizontal"
android:gravity="center"
android:orientation="vertical"
android:showDividers="middle" >
si vous utilisez actionBarSherlock, vous pouvez utiliser le com.actionbarsherlock.interne.widget.IcsLinearLayout classe afin de soutenir les intercalaires et de les Montrer entre les vues .
exemple d'usage:
<com.actionbarsherlock.internal.widget.IcsLinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:divider="@drawable/divider"
android:dividerPadding="10dp"
android:orientation="vertical"
android:showDividers="beginning|middle|end" >
... children...
res/drawable/diviseur.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<size android:height="2dip" />
<solid android:color="#FFff0000" />
</shape>
notez que pour une raison quelconque, l'aperçu dans le concepteur graphique dit" android.graphique.bitmap_delegate.nativeRecycle (I)Z" . pas sûr de ce qu'il signifie, mais il peut être ignoré car il fonctionne très bien sur les deux nouvelles versions d'android et d'anciens (testé sur android 4.2 et 2.3) .
semble que l'erreur n'est affichée que lorsque vous utilisez API17 pour le concepteur graphique.
Ecrivez juste ceci:
android:divider="?android:dividerHorizontal"
android:showDividers="middle"
exemple complet:
<LinearLayout
android:id="@+id/llTipInformation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tvServiceRating"
android:orientation="horizontal"
android:divider="?android:dividerHorizontal"
android:layout_marginTop="@dimen/activity_horizontal_margin"
android:showDividers="middle">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="@string/main.msg.tippercent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/colorWhite"
android:layout_marginTop="@dimen/activity_vertical_margin"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="@string/main.msg.tiptotal"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/colorWhite"
android:layout_marginTop="@dimen/activity_vertical_margin"/>
</LinearLayout>
j'ai trouvé le moyen le plus simple d'ajouter un diviseur.
diviseur Vertical:
<View style="@style/dividerVertical"/>
diviseur Horizontal:
<View style="@style/dividerHorizontal"/>
C'est tout oui!
il suffit de mettre ceci dans res>values>styles.xml
<style name="dividerBase">
<item name="android:background">?android:attr/listDivider</item> //you can give your color here. that will change all divider color in your app.
</style>
<style name="dividerHorizontal" parent="dividerBase">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">1dp</item> // You can change thickness here.
</style>
<style name="dividerVertical" parent="dividerBase">
<item name="android:layout_width">1dp</item>
<item name="android:layout_height">match_parent</item>
</style>
ajouter cette vue; qui dessine un séparateur entre votre textviews
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#000000" />
Voici votre réponse..c'est un exemple pour tracer la ligne entre les contrôles...
<TextView
android:id="@+id/textView1"
style="@style/behindMenuItemLabel1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:text="FaceBook Feeds" />
<View
android:layout_width="fill_parent"
android:layout_height="2dp"
android:background="#d13033"/>
<ListView
android:id="@+id/list1"
android:layout_width="350dp"
android:layout_height="50dp" />
ce code trace une ligne entre deux commandes...
C'est très simple. Il suffit de créer une Vue avec la couleur de fond noir.
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#000"/>
cela créera une ligne horizontale avec la couleur de fond. Vous pouvez également ajouter d'autres attributs, tels que les marges, les rembourrages etc comme tout autre point de vue.
il ajoute un diviseur horizontal à n'importe où dans votre disposition.
<TextView
style="?android:listSeparatorTextViewStyle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
//for vertical line:
<View
android:layout_width="1dp"
android:layout_height="fill_parent"
android:background="#00000000" />
//for horizontal line:
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="#00000000" />
//it works like a charm
version D'exécution:
View dividerView = new View(getContext());
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, UIUtils.dpToPix(getContext(), 1));
dividerView.setLayoutParams(lp);
TypedArray array = getContext().getTheme()
.obtainStyledAttributes(new int[] {android.R.attr.listDivider});
Drawable draw = array.getDrawable(0);
array.recycle();
dividerView.setBackgroundDrawable(draw);
mParentLayout.addView(dividerView);
utilisez ce code xml pour ajouter la ligne verticale
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:background="#000000" />
utilisez ce code xml pour ajouter la ligne horizontale
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#000000" />
<View
android:layout_width="2dp"
android:layout_height="match_parent"
android:layout_marginTop="4dp"
android:background="@android:color/darker_gray" />
entre deux dispositions mettent ce code pour obtenir Divider.
dans les cas où l'on utilise la propriété android:layout_weight
pour attribuer de l'espace d'écran disponible à des éléments de mise en page, par exemple
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:orientation="vertical">
...
...
</LinearLayout>
/* And we want to add a verical separator here */
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:orientation="vertical">
...
...
</LinearLayout>
</LinearLayout>
pour ajouter un séparateur entre les deux mises en page existantes qui ont déjà pris la totalité de l'espace d'écran, nous ne pouvons pas simplement ajouter une autre sortie linéaire avec android:weight:"1"
parce que cela fera trois colonnes d'égale largeur que nous ne voulons pas. Au lieu de cela, nous allons diminuer la quantité d'espace que nous allons donner à cette nouvelle disposition.
Final le code ressemblerait à ceci:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:orientation="vertical">
...
...
</LinearLayout>
/* *************** ********************** */
/* Add another LinearLayout with android:layout_weight="0.01" and
android:background="#your_choice" */
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.01"
android:background="@android:color/darker_gray"
/>
/* Or View can be used */
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_marginTop="16dp"
android:background="@android:color/darker_gray"
/>
/* *************** ********************** */
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:orientation="vertical">
...
...
</LinearLayout>
</LinearLayout>
vous pouvez utiliser cet élément <View>
juste après le premier TextView.
<View
android:layout_marginTop="@dimen/d10dp"
android:id="@+id/view1"
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="#c0c0c0"/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="2dp"
android:scaleType="fitXY"
android:src="?android:attr/listDivider" />
Si vous allez l'utiliser beaucoup, la meilleure chose à faire est de
les styles.xml:
<style name="Seperator">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">1dp</item>
<item name="android:background">@color/light_color</item>
</style>
maintenant, dans votre mise en page, il suffit de l'ajouter comme:
<View style="@style/Seperator" />
j'utilise habituellement ce code:
<ImageView
android:id="@+id/imageView2"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignParentLeft="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:background="#aa000000" />
si vous avez un objet dans votre mise en page et que vous voulez définir une ligne au-dessous de laquelle utilisez cet attribut dans ImageView:
android:layout_below="@+id/textBox1"
cela vous aiderait à résoudre ce problème. Ici une petite vue est créée pour faire une ligne noire comme séparateur entre deux vues.
<View
android:layout_width="3dp"
android:layout_height="wrap_content"
android:background="@android:color/black"
/>
ajouter une ligne noire horizontale en utilisant:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#000000"
android:layout_marginTop="10dp"/>
pour compléter Camille Sévigny réponse, vous pouvez en outre définir votre propre forme de ligne par exemple pour personnaliser la couleur de ligne.
définit une forme xml dans le répertoire dessinable. line_horizontal.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" android:shape="line">
<stroke android:width="2dp" android:color="@android:color/holo_blue_dark" />
<size android:width="5dp" />
</shape>
utilisez cette ligne dans votre mise en page avec les attributs souhaités:
<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="2dp"
android:src="@drawable/line_horizontal" />
voici le code "une ligne de séparation horizontale entre deux vues textuelles". Essayez
<TextView
android:id="@id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="5dp"
android:inputType="textPersonName"
android:text:"address" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/black"/>
<TextView
android:id="@id/textView7"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:text:"Upload File" />/>
Diviser l'espace en deux parties égales:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:divider="?android:dividerHorizontal"
android:showDividers="end"></LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"></LinearLayout>
</LinearLayout>
Avis qu'une partie contient un diviseur à la fin
Simple solution
il suffit d'ajouter ce code dans votre mise en page et de remplacer" Id_of__view_present_above " à l'id de la vue, en dessous duquel vous avez besoin du diviseur.<TextView
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#c0c0c0"
android:id="@+id/your_id"
android:layout_marginTop="16dp"
android:layout_below="@+id/Id_of__view_present_above"
/>
par exemple, si vous avez utilisé recyclerView pour vos articles:
dans la construction.gradle écrit:
dependencies {
compile 'com.yqritc:recyclerview-flexibledivider:1.4.0'
si vous voulez définir la couleur, la taille et les valeurs de marge, vous pouvez spécifier comme suit:
RecyclerView recyclerView = (RecyclerView)
findViewById(R.id.recyclerview);
recyclerView.addItemDecoration(
new HorizontalDividerItemDecoration.Builder(this)
.color(Color.RED)
.sizeResId(R.dimen.divider)
.marginResId(R.dimen.leftmargin, R.dimen.rightmargin)
.build());
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<item
android:bottom="0dp"
android:left="-2dp"
android:right="-2dp"
android:top="-2dp">
<shape android:shape="rectangle">
<stroke
android:width="1dp"
android:color="@color/divider" />
</shape>
</item>