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:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#8fff93" />
<stroke
android:width="1px"
android:color="#000" />
</shape>
Vous pouvez supprimer le solid
si vous ne voulez pas de remplissage. L'ensemble background="@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.
<View
android:id="@+id/border"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/image"
android:layout_alignLeft="@+id/image"
android:layout_alignRight="@+id/image"
android:layout_alignTop="@+id/main_image"
android:background="#000" />
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_...
android:padding="1px"
android:src="@drawable/..." />
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 ensemble RelativeLayout
, car il y a un bogue qui vous empêche de remplir un RelativeLayout
avec un View
. Dans ce cas, je recommanderais le Shape
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 des View
s vides au-dessus et en dessous comme ceci:
<View android:background="#000" android:layout_width="match_parent" android:layout_height="1px"/>