Opción 1: forma dibujable
Esta es la opción más simple si desea un borde alrededor de un diseño o vista en el que puede establecer el fondo. Cree un archivo XML en la drawablecarpeta que se vea así:
<?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>
Puede eliminar el solidsi no desea un relleno. El conjunto background="@drawable/your_shape_drawable"en su diseño / vista.
Opción 2: Vista de fondo
Aquí hay un pequeño truco que he usado en un RelativeLayout. Básicamente, tiene un cuadrado negro debajo de la vista que desea dar a un borde, y luego dale a esa vista algo de relleno (¡no margen!) Para que el cuadrado negro se vea en los bordes.
Obviamente, esto solo funciona correctamente si la vista no tiene áreas transparentes. Si es así, te recomendaría que escribas una costumbre BorderViewque solo dibuje el borde, solo debería ser una docena de líneas de código.
<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 usted se pregunta, que hace el trabajo con adjustViewBounds=true. Sin embargo, no funciona si quieres tener un fondo completo RelativeLayout, porque hay un error que te impide llenar un RelativeLayouta View. En ese caso, recomendaría el Shapedibujable.
Opción 3: 9 parches
Una última opción es usar un dibujo de 9 parches como este:

Puede usarlo en cualquier vista donde pueda configurarlo android:background="@drawable/...". Y sí, tiene que ser 6x6: probé 5x5 y no funcionó.
La desventaja de este método es que no puede cambiar los colores muy fácilmente, pero si desea bordes elegantes (por ejemplo, solo un borde en la parte superior e inferior, como en esta pregunta), es posible que no pueda hacerlo con el Shapedibujo , que no es muy poderoso.
Opción 4: vistas adicionales
Olvidé mencionar esta opción realmente simple si solo quieres bordes arriba y abajo de tu vista. Puede poner su vista en vertical LinearLayout(si aún no lo está) y luego agregar Views vacías arriba y debajo de esta manera:
<View android:background="#000" android:layout_width="match_parent" android:layout_height="1px"/>