Вариант 1: Форма Drawable
Это самый простой вариант, если вам нужна рамка вокруг макета или вида, в которой вы можете установить фон. Создайте файл XML в drawableпапке, которая выглядит примерно так:
<?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>
Вы можете удалить, solidесли вы не хотите заполнять. Набор background="@drawable/your_shape_drawable"на ваш макет / вид.
Вариант 2: фоновый вид
Вот маленький трюк, который я использовал в RelativeLayout. По сути, у вас есть черный квадрат под видом, который вы хотите задать рамку, а затем дать этому виду некоторый отступ (не отступ!), Чтобы черный квадрат просвечивал по краям.
Очевидно, что это работает правильно, только если у вида нет прозрачных областей. Если это произойдет, я бы порекомендовал вам написать кастом, BorderViewкоторый рисует только границу - это должно быть всего несколько десятков строк кода.
<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/..." />
Если вам интересно, что делает работу с adjustViewBounds=true. Тем не менее, это не работает, если вы хотите иметь фон целиком RelativeLayout, потому что есть ошибка, которая мешает вам заполнить RelativeLayoutс View. В этом случае я бы порекомендовал ShapeDrawable.
Вариант 3: 9-патч
Последний вариант - использовать 9-патч, как этот:

Вы можете использовать его в любом представлении, где вы можете установить android:background="@drawable/...". И да, это должно быть 6х6 - я пробовал 5х5, и это не сработало.
Недостаток этого метода в том, что вы не можете изменить цвета очень легко, но если вам нужны причудливые границы (например, только границы сверху и снизу, как в этом вопросе), то вы не сможете сделать их с помощью Shapeрисования. , который не очень мощный.
Вариант 4: дополнительные виды
Я забыл упомянуть этот действительно простой вариант, если вы хотите, чтобы границы только выше и ниже вашего обзора. Вы можете поместить свой вид по вертикали LinearLayout(если это еще не так), а затем добавить пустые Views над и под ним, например:
<View android:background="#000" android:layout_width="match_parent" android:layout_height="1px"/>