J'ai un TextView et je voudrais ajouter une bordure noire le long de ses bordures supérieure et inférieure. J'ai essayé d'ajouter android:drawableTop
et android:drawableBottom
à TextView, mais cela n'a fait que noircir la vue entière.
<TextView
android:background="@android:color/green"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawableTop="@android:color/black"
android:drawableBottom="@android:color/black"
android:text="la la la" />
Existe-t-il un moyen d'ajouter facilement une bordure supérieure et inférieure à une vue (en particulier, une TextView) dans Android?
Réponses:
Dans Android 2.2, vous pouvez effectuer les opérations suivantes.
Créez un dessin xml tel que /res/drawable/textlines.xml et affectez-le en tant que propriété d'arrière-plan de TextView.
/res/drawable/textlines.xml
L'inconvénient est que vous devez spécifier une couleur d'arrière-plan opaque, car les transparents ne fonctionneront pas. (Au moins, je le pensais, mais je me trompais). Dans l'exemple ci-dessus, vous pouvez voir que la couleur unie de la première forme #FFdddddd est copiée dans la couleur de contour des 2e formes.
la source
android:color="@null"
pour éviter un problème de fond opaque.J'ai utilisé une astuce pour que la bordure s'affiche à l'extérieur du conteneur. Avec cette astuce, seule une ligne est tracée afin que l'arrière-plan soit affiché de la vue sous-jacente.
la source
Option 1: Forme dessinable
Il s'agit de l'option la plus simple si vous souhaitez une bordure autour d'une présentation ou d'une vue dans laquelle vous pouvez définir l'arrière-plan. Créez un fichier XML dans le
drawable
dossier qui ressemble à ceci:Vous pouvez supprimer le
solid
si vous ne voulez pas de remplissage. L'ensemblebackground="@drawable/your_shape_drawable"
sur votre mise en page / vue.Option 2: vue d'arrière-plan
Voici un petit truc que j'ai utilisé dans un
RelativeLayout
. Fondamentalement, vous avez un carré noir sous la vue que vous souhaitez donner une bordure, puis donnez à cette vue un rembourrage (pas de marge!) Afin que le carré noir soit visible sur les bords.Évidemment, cela ne fonctionne correctement que si la vue n'a pas de zones transparentes. Si c'est le cas, je vous recommanderais d'écrire une coutume
BorderView
qui ne dessine que la frontière - elle ne devrait contenir que quelques dizaines de lignes de code.Si vous vous demandez, il fait le travail avec
adjustViewBounds=true
. Cependant, cela ne fonctionne pas si vous voulez avoir un arrière-plan dans son ensembleRelativeLayout
, car il y a un bogue qui vous empêche de remplir unRelativeLayout
avec unView
. Dans ce cas, je recommanderais leShape
drawable.Option 3: 9 patchs
Une dernière option consiste à utiliser un patch à 9 patchs comme celui-ci:
Vous pouvez l'utiliser sur n'importe quelle vue où vous pouvez définir
android:background="@drawable/..."
. Et oui, il doit être 6x6 - j'ai essayé 5x5 et cela n'a pas fonctionné.L'inconvénient de cette méthode est que vous ne pouvez pas changer les couleurs très facilement, mais si vous voulez des bordures fantaisie (par exemple, seulement une bordure en haut et en bas, comme dans cette question), vous ne pourrez peut-être pas les faire avec le
Shape
dessinable , ce qui n'est pas très puissant.Option 4: Vues supplémentaires
J'ai oublié de mentionner cette option vraiment simple si vous ne voulez que des bordures au-dessus et en dessous de votre vue. Vous pouvez placer votre vue dans une verticale
LinearLayout
(si ce n'est pas déjà fait) puis ajouter desView
s vides au-dessus et en dessous comme ceci:la source
Pour ajouter une
1dp
bordure blanche en bas uniquement et pour avoir un arrière-plan transparent, vous pouvez utiliser ce qui suit, qui est plus simple que la plupart des réponses ici.Pour la
TextView
ou une autre vue, ajoutez:Et dans le
drawable
répertoire, ajoutez le XML suivant, appeléborderbottom.xml
Si vous voulez une bordure en haut, changez la
android:top="-2dp"
enandroid:bottom="-2dp"
La couleur n'a pas besoin d'être blanche et l'arrière-plan n'a pas besoin d'être transparent non plus.
L'
solid
élément peut ne pas être requis. Cela dépendra de votre conception (merci V. Kalyuzhnyu).Fondamentalement, ce XML créera une bordure en utilisant la forme rectangle, mais repoussera ensuite les côtés supérieur, droit et gauche au-delà de la zone de rendu de la forme. Cela laisse juste la bordure inférieure visible.
la source
-2dp
vs1dp
)? Semble fonctionner lorsque leur montant est égal (-1
et1
).-2dp
le résultat était toujours propre. Je pense qu'il y avait un cas de test où le résultat n'était pas propre. Je ne me souviens pas s'il s'agissait d'un écran basse ou haute densité ou même d'une ancienne version d'Android (2.x peut-être).4dp
pour la largeur de trait dois-je utiliser-8dp
pour le positionnement?-5dp
serait tout ce qui est nécessaire avec une valeur de largeur de4pd
. Elle devait simplement être un peu plus grande pour surmonter l'inexactitude de la valeur flottante.La réponse actuellement acceptée ne fonctionne pas. Il crée de fines bordures verticales sur les côtés gauche et droit de la vue en raison de l'anticrénelage.
Cette version fonctionne parfaitement. Il vous permet également de définir les largeurs de bordure indépendamment, et vous pouvez également ajouter des bordures sur les côtés gauche / droit si vous le souhaitez. Le seul inconvénient est qu'il ne prend pas en charge la transparence.
Créez un dessin xml nommé
/res/drawable/top_bottom_borders.xml
avec le code ci-dessous et affectez-le en tant que propriété d'arrière-plan de TextView.Testé sur Android KitKat via Marshmallow
la source
Je voulais donc faire quelque chose de légèrement différent: une bordure en bas UNIQUEMENT, pour simuler un diviseur ListView. J'ai modifié la réponse de Piet Delport et j'ai obtenu ceci:
Notez l'utilisation de px au lieu de dp pour obtenir exactement un diviseur de 1 pixel (certains DPI de téléphone feront disparaître une ligne de 1dp).
la source
"@color/background_trans_light"
?Comme l'a dit @Nic Hubbard, il existe un moyen très simple d'ajouter une ligne de bordure.
Vous pouvez modifier la hauteur et la couleur d'arrière-plan comme vous le souhaitez.
la source
Mes réponses sont basées sur la version @Emile mais j'utilise une couleur transparente au lieu d'un solide.
Cet exemple dessine une bordure inférieure de 2dp.
@ color / bgcolor est la couleur de l'arrière-plan sur lequel vous dessinez votre vue avec bordure.
Si vous souhaitez modifier la position de la bordure, modifiez le décalage avec l'un des éléments suivants:
ou combinez-les pour avoir 2 bordures ou plus:
la source
Vous pouvez également envelopper la vue dans un FrameLayout, puis définir la couleur d'arrière-plan et le remplissage du cadre à votre guise; cependant, la vue de texte, par défaut, a un arrière-plan «transparent», vous devez donc également changer la couleur d'arrière-plan de la vue de texte.
la source
Pourquoi ne pas simplement créer une vue haute de 1dp avec une couleur d'arrière-plan? Ensuite, il peut être facilement placé où vous le souhaitez.
la source
Juste pour ajouter ma solution à la liste ..
Je voulais une bordure inférieure semi transparente qui dépasse la forme d'origine (donc la bordure semi-transparente était en dehors du rectangle parent).
Ce qui me donne;
la source
Pour changer cela:
Je préfère cette approche dans "drawable / top_bottom_border.xml":
Cela ne fait que les bordures, pas un rectangle qui apparaîtra si votre arrière-plan a une couleur.
la source
Créez d'abord un fichier xml avec le contenu indiqué ci-dessous et nommez-le border.xml et placez-le dans le dossier de mise en page dans le répertoire res
Après cela, à l'intérieur du code, utilisez
Cela fera une ligne noire en haut et en bas du TextView.
la source
Notez le code ci-dessous
la source
Voici un moyen d'y parvenir.
Premier élément pour le trait et deuxième pour le fond uni. Masquage des bordures gauche et droite.
la source
Le moyen le plus simple d'ajouter des bordures pour insérer les bordures à l'aide de ce
InsetDrawable
qui suit ne montrera que la bordure supérieure:la source
Ajouter un fichier à res / drawable
Ajouter un lien sur ce fichier à la propriété d' arrière-plan
la source
Essayez d'habiller l'image avec une disposition linéaire et définissez son arrière-plan sur la couleur de bordure souhaitée autour du texte. Ensuite, définissez le rembourrage sur la vue de texte pour qu'il soit l'épaisseur souhaitée pour votre bordure.
la source
Vous pouvez également utiliser un chemin à 9 voies pour faire votre travail. Créez-le de sorte que le pixel coloré ne se multiplie pas en hauteur mais uniquement le pixel transparent.
la source
la source
Ajoutez simplement des vues en haut et en bas de la
View
la source
la source
Ajoutez simplement ce TextView sous le texte où vous souhaitez ajouter la bordure
la source
Juste pour appliquer les réponses de @phreakhead et de user1051892 ,
<item android:bottom|android:left|android:right|android:top>
si elles sont négatives, elles doivent être supérieures à<stroke android:width>
. Sinon, la peinture de l'article sera mélangée avec la peinture du trait et vous pouvez penser que ces valeurs ne fonctionnent pas.la source