Est-il un moyen facile d'ajouter une bordure en haut et en bas d'un Android Vue?
J'ai un TextView et je voudrais ajouter une bordure noire le long de son haut et le bas des frontières. J'ai essayé d'ajouter android:drawableTop
et android:drawableBottom
pour le TextView, mais qui a causé la vue d'ensemble pour devenir noir.
<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" />
Est-il un moyen d'ajouter facilement une bordure supérieure et inférieure d'un point de Vue (en particulier, un TextView) dans Android?
- Il est surprenant que personne n'a fait mention dividerVertical ! C'est la chose créée par Android, pour atteindre, ainsi, des séparateurs à la verticale. COoldn pas être plus facile et vous faites tout dans le "Design" WYSIWYG panneau dans Android Studio.
- note dividerVertical a été mis en œuvre dans l'API 11.
- Peut-être vous pouvez montrer comment utiliser dividerVertical?
Vous devez vous connecter pour publier un commentaire.
Dans android 2.2, vous pouvez effectuer les opérations suivantes.
Créer un xml drawable comme /res/drawable/textlines.xml et attribuer cela comme un TextView du fond de la propriété.
/res/drawable/textlines.xml
L'inconvénient de cette est que vous devez spécifier un arrière-plan opaque de couleur, que les transparents ne fonctionne pas. (Au moins, je pense qu'ils ont fait, mais je me trompe). Dans l'exemple ci-dessus, vous pouvez voir que la couleur solide de la première forme #FFdddddd est copié dans le 2ème formes de contour de couleur.
android:color="@null"
pour éviter d'arrière-plan opaque problème.J'ai utilisé un truc de sorte que la frontière est affiché à l'extérieur du récipient. Avec cette astuce, seule une ligne est tracée de sorte que le fond sera indiqué de la vision sous-jacente.
<solid android:color="#00FFFFFF" />
, il travaille aussi~Option 1: Forme Drawable
Cette option est la plus simple si vous voulez une bordure autour d'une mise en page ou de la vue dans laquelle vous pouvez définir l'arrière-plan. Créer un fichier XML dans le
drawable
dossier qui ressemble à quelque chose comme ceci:Vous pouvez supprimer le
solid
si vous ne voulez pas de se remplir. L'ensemblebackground="@drawable/your_shape_drawable"
sur votre mise en page/view.Option 2: L'Arrière-Plan De La Vue
Voici une petite astuce que j'ai utilisé dans un
RelativeLayout
. Fondamentalement, vous avez un carré noir en vertu de la vue qui vous souhaitez donner une frontière, et de donner ensuite que la vue du rembourrage (pas de marge!) de sorte que le carré noir apparaît sur les bords.Évidemment, cela ne fonctionne correctement que si la vue n'ont pas de zones transparentes. Si c'est le cas je vous recommande de vous écrire une coutume
BorderView
qui tire seulement de la frontière -, il devrait être de seulement quelques dizaines de lignes de code.Si vous vous demandez, il ne travailler avec
adjustViewBounds=true
. Toutefois, il ne fonctionne pas si vous voulez avoir un fond dans un ensemble deRelativeLayout
, car il y a un bug qui vous empêche de remplir unRelativeLayout
avec unView
. Dans ce cas, je vous recommande laShape
drawable.Option 3: 9-patch
Une dernière option consiste à utiliser un 9-patch dessiné comme celui-ci:
Vous pouvez l'utiliser sur n'importe quel point de vue où vous pouvez définir
android:background="@drawable/..."
. Et oui il ne faut 6x6 - j'ai essayé de 5x5 et ça ne fonctionne pas.L'inconvénient de cette méthode est que vous ne pouvez pas changer les couleurs très facilement, mais si vous voulez vous avez envie frontières (par exemple, seulement une bordure en haut et en bas, comme dans cette question) alors vous ne pouvez pas être en mesure de le faire avec le
Shape
drawable, ce qui n'est pas très puissant.Option 4: vues Supplémentaires
J'ai oublié de mentionner ce vraiment simple option si vous ne souhaitez que des frontières ci-dessus et en dessous de votre point de vue. Vous pouvez mettre votre point de vue à la verticale
LinearLayout
(si elle n'est pas déjà fait) puis ajoutez videView
s au-dessus et au-dessous de cette façon:Pour ajouter un
1dp
bordure blanche sur le fond et d'avoir un fond transparent, vous pouvez utiliser la commande suivante qui est plus simple que la plupart des réponses ici.Pour la
TextView
ou l'autre point de vue, ajouter:Et dans le
drawable
répertoire ajoutez le code XML suivant, appeléborderbottom.xml
Si vous voulez une bordure en haut, changer la
android:top="-2dp"
àandroid:bottom="-2dp"
La couleur n'a pas besoin d'être blanc et le fond n'a pas besoin d'être transparent soit.
La
solid
élément peut ne pas être nécessaire. Cela dépendra de votre conception (grâce V. Kalyuzhnyu).Fondamentalement, ce XML permettra de créer une frontière à l'aide de la forme de rectangle, mais pousse ensuite le haut, les côtés droit et gauche au-delà de la zone de rendu pour la forme. Cela laisse juste le bas de la zone visible.
-2dp
vs1dp
)? Semble fonctionner quand ils sont égaux en quantité (-1
et1
).-2dp
le résultat était toujours propre. Je pense qu'il y a des cas de test lorsque le résultat n'était pas propre. Je ne me souviens pas si c'était une basse ou haute densité de l'écran ou même une ancienne version d'Android (2.x peut-être).4dp
pour la largeur du trait dois-je utiliser-8dp
pour le positionnement?-5dp
serait tout ce qui est nécessaire avec une valeur de largeur de4pd
. Il a simplement besoin d'être un peu plus pour obtenir plus de la valeur float inexactitude.solid
est reduntDonc, je voulais faire quelque chose de légèrement différent: une frontière sur le fond, afin de simuler un ListView diviseur. J'ai modifié Piet Delport réponse et obtenu ceci:
Remarque à l'aide de px au lieu de dp pour obtenir exactement 1 pixel diviseur (certains téléphone Dpi fera une 1dp ligne de disparaître).
"@color/background_trans_light"
?Actuellement accepté de répondre ne fonctionne pas. Il crée de fines bordures verticales sur les côtés gauche et droit de la vue comme un résultat de l'anti-aliasing.
Cette version fonctionne parfaitement. Il vous permet aussi de définir la frontière largeurs de façon indépendante, et vous pouvez également ajouter des bordures à gauche /à droite si vous le souhaitez. Le seul inconvénient est qu'il ne prend PAS en charge la transparence.
Créer un xml drawable nommé
/res/drawable/top_bottom_borders.xml
avec le code ci-dessous et de le définir comme un TextView du fond de la propriété.Testé sur Android KitKat grâce à la Guimauve
Tout comme @Nic Hubbard dit, il y a un moyen très facile d'ajouter une ligne de bordure.
Vous pouvez modifier la hauteur et la couleur d'arrière-plan de ce que vous voulez.
Vous pouvez aussi envelopper la vue dans un FrameLayout, puis à définir le cadre de la couleur d'arrière-plan et du remplissage de ce que vous voulez; toutefois, le textview, a par défaut 'transparent' arrière-plan, de sorte que vous aurez besoin de changer le textview la couleur d'arrière-plan trop.
Mes réponses est basé sur @Emile version mais j'utilise la couleur transparente au lieu de solide.
Cet exemple va dessiner un 2dp de la bordure inférieure.
@couleur/bgcolor est la couleur de l'arrière-plan sur lequel vous dessinez votre point de vue avec la frontière.
Si vous souhaitez modifier la position de la frontière changer le décalage avec l'un de:
ou les combiner pour avoir 2 ou plusieurs frontières:
Pourquoi ne pas simplement créer un 1dp vue en haut avec une couleur d'arrière-plan? Ensuite, il peut être placé où vous le souhaitez.
Juste pour ajouter ma solution à la liste..
Je voulais un semi transparent bordure inférieure qui s'étend au-delà de l'original à la forme de la semi-transparent la frontière a été à l'extérieur le parent rectangle).
Qui me donne;
D'abord faire un fichier xml dont le contenu est indiqué ci-dessous et de le nommer border.xml et le placer à l'intérieur de la mise en page dossier dans le répertoire res
Après qu'à l'intérieur le code à utiliser
Ce sera une ligne noire sur le haut et le bas de la TextView.
Pour changer cela:
Je préfère cette approche en "drawable/top_bottom_border.xml":
Cela fait seulement les frontières, et pas un rectangle qui s'affiche si votre arrière-plan est de couleur.
Écrire de code ci-dessous
Façon la plus simple pour ajouter des bordures pour insérer les frontières à l'aide de
InsetDrawable
,à la suite montrera bordure supérieure seulement :Essayez habillage de l'image avec un linearlayout, et de définir un fond de la couleur de la bordure que vous voulez autour du texte. Ensuite, réglez le rembourrage sur le textview à l'épaisseur que vous voulez pour votre frontière.
Vous pouvez également utiliser un 9-chemin pour faire votre travail. Créer ainsi que de couleur de pixel ne se multiplient pas à la hauteur, mais seulement le pixel transparent.
Ajouter simplement de la Vue en haut et en bas de la
View
Il suffit d'Ajouter ce TextView ci-dessous le texte à l'endroit où vous souhaitez ajouter la frontière
Ici est une façon de l'atteindre.
Premier élément de l'avc et une seconde pour l'arrière-plan solide. Cacher les bordures gauche et droite.
Juste pour faire appliquer @phreakhead s et user1051892 s réponses,
<item android:bottom|android:left|android:right|android:top>
si le résultat est négatif, doit être supérieure à<stroke android:width>
. Si non, les éléments de la peinture sera mélangé avec des traits de peinture et vous pouvez penser que ces valeurs ne sont pas de travail.