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