Opção 1: Forma Drawable
Essa é a opção mais simples se você quiser uma borda em torno de um layout ou exibição na qual possa definir o plano de fundo. Crie um arquivo XML na drawable
pasta que se parece com isso:
<?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>
Você pode remover o solid
se não desejar um preenchimento. O conjunto background="@drawable/your_shape_drawable"
no seu layout / exibição.
Opção 2: Vista em segundo plano
Aqui está um pequeno truque que eu usei no RelativeLayout
. Basicamente, você tem um quadrado preto embaixo da vista que deseja dar uma borda e, em seguida, dê a ela um pouco de preenchimento (não margem!) Para que o quadrado preto apareça nas bordas.
Obviamente, isso só funciona corretamente se a visualização não tiver áreas transparentes. Se isso acontecer, recomendo que você escreva um costume BorderView
que desenhe apenas a borda - deve haver apenas algumas dezenas de linhas 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/..." />
Se você está se perguntando, ele faz o trabalho com adjustViewBounds=true
. No entanto, não funciona se você deseja ter um plano de fundo em um todo RelativeLayout
, porque há um erro que impede que você preencha um RelativeLayout
com a View
. Nesse caso, eu recomendaria o Shape
drawable.
Opção 3: 9 patches
Uma opção final é usar um drawable de 9 patches como este:
Você pode usá-lo em qualquer vista em que possa definir android:background="@drawable/..."
. E sim, precisa ser 6x6 - tentei 5x5 e não funcionou.
A desvantagem desse método é que você não pode alterar as cores com muita facilidade, mas se você deseja bordas sofisticadas (por exemplo, apenas uma borda na parte superior e inferior, como nesta pergunta), talvez não consiga fazê-las com o Shape
drawable , o que não é muito poderoso.
Opção 4: visualizações extras
Esqueci de mencionar essa opção realmente simples se você quiser apenas bordas acima e abaixo da sua visualização. Você pode colocar sua visualização em uma vertical LinearLayout
(se ainda não estiver) e adicionar View
s vazios acima e abaixo desta forma:
<View android:background="#000" android:layout_width="match_parent" android:layout_height="1px"/>