Eu tenho um TextView e gostaria de adicionar uma borda preta ao longo das bordas superior e inferior. Tentei adicionar android:drawableTop
e android:drawableBottom
ao TextView, mas isso só fez com que toda a exibição ficasse preta.
<TextView
android:background="@android:color/green"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawableTop="@android:color/black"
android:drawableBottom="@android:color/black"
android:text="la la la" />
Existe uma maneira de adicionar facilmente uma borda superior e inferior a uma View (em particular, uma TextView) no Android?
android
border
android-view
textview
empapar
fonte
fonte
Respostas:
No Android 2.2, você pode fazer o seguinte.
Crie um drawable xml como /res/drawable/textlines.xml e atribua-o como uma propriedade de segundo plano do TextView.
/res/drawable/textlines.xml
O lado negativo disso é que você deve especificar uma cor de fundo opaca, pois as transparências não funcionarão. (Pelo menos eu pensei que eles fizeram, mas eu estava enganado). No exemplo acima, você pode ver que a cor sólida da primeira forma #FFdddddd é copiada na cor do traçado da 2ª forma.
fonte
android:color="@null"
para evitar problemas de fundo opaco.Eu usei um truque para que a borda seja exibida fora do contêiner. Com esse truque, apenas uma linha é desenhada para que o plano de fundo seja mostrado na vista subjacente.
fonte
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:Você pode remover o
solid
se não desejar um preenchimento. O conjuntobackground="@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.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 todoRelativeLayout
, porque há um erro que impede que você preencha umRelativeLayout
com aView
. Nesse caso, eu recomendaria oShape
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 adicionarView
s vazios acima e abaixo desta forma:fonte
Para adicionar uma
1dp
borda branca apenas na parte inferior e ter um fundo transparente, use o seguinte, que é mais simples do que a maioria das respostas aqui.Para a
TextView
ou outra visualização, adicione:E no
drawable
diretório, adicione o seguinte XML, chamadoborderbottom.xml
Se você deseja uma borda na parte superior, altere
android:top="-2dp"
paraandroid:bottom="-2dp"
A cor não precisa ser branca e o fundo também não precisa ser transparente.
O
solid
elemento pode não ser necessário. Isso vai depender do seu design (obrigado V. Kalyuzhnyu).Basicamente, esse XML criará uma borda usando a forma de retângulo, mas empurrará os lados superior, direito e esquerdo para além da área de renderização da forma. Isso deixa apenas a borda inferior visível.
fonte
-2dp
vs1dp
)? Parece funcionar quando são iguais em quantidade (-1
e1
).-2dp
o resultado estava sempre limpo. Eu acho que houve um caso de teste em que o resultado não foi limpo. Não me lembro se era uma tela de baixa ou alta densidade ou mesmo uma versão mais antiga do Android (talvez 2.x).4dp
na largura do traço, devo usar-8dp
no posicionamento?-5dp
seria tudo o que é necessário com um valor de largura de4pd
. Ele simplesmente precisava ser um pouco maior para superar a imprecisão do valor flutuante.A resposta atualmente aceita não funciona. Ele cria bordas verticais finas nos lados esquerdo e direito da exibição, como resultado da suavização de serrilhado.
Esta versão funciona perfeitamente. Ele também permite que você defina as larguras das bordas independentemente, e também pode adicionar bordas nos lados esquerdo / direito, se desejar. A única desvantagem é que ele NÃO suporta transparência.
Crie um drawable xml nomeado
/res/drawable/top_bottom_borders.xml
com o código abaixo e atribua-o como uma propriedade em segundo plano do TextView.Testado no Android KitKat através do Marshmallow
fonte
Então, eu queria fazer algo um pouco diferente: SOMENTE uma borda na parte inferior, para simular um divisor do ListView. Modifiquei a resposta de Piet Delport e obtive o seguinte:
Observe o uso de px em vez de dp para obter exatamente um divisor de 1 pixel (alguns DPIs de telefone farão desaparecer uma linha de 1dp).
fonte
"@color/background_trans_light"
?Assim como o @Nic Hubbard disse, existe uma maneira muito fácil de adicionar uma linha de fronteira.
Você pode alterar a altura e a cor do plano de fundo para o que quiser.
fonte
Minhas respostas são baseadas na versão @Emile, mas eu uso cores transparentes em vez de sólidas.
Este exemplo irá desenhar uma borda inferior de 2dp.
@ color / bgcolor é a cor do plano de fundo na qual você desenha sua vista com borda.
Se você deseja alterar a posição da borda, altere o deslocamento com um dos seguintes:
ou combine-os para ter 2 ou mais bordas:
fonte
Você também pode quebrar a vista em um FrameLayout e definir a cor de fundo e o preenchimento do quadro para o que desejar; no entanto, a visualização de texto, por padrão, possui um plano de fundo 'transparente'; portanto, você também precisa alterar a cor do plano de fundo da visualização de texto.
fonte
Por que não criar apenas uma vista alta de 1dp com uma cor de fundo? Em seguida, ele pode ser facilmente colocado onde você quiser.
fonte
Apenas para adicionar minha solução à lista.
Eu queria uma borda inferior semitransparente que ultrapassasse a forma original (portanto, a borda semitransparente estava fora do retângulo pai).
O que me dá;
fonte
Para mudar isso:
Eu prefiro essa abordagem em "drawable / top_bottom_border.xml":
Isso cria apenas as bordas, não um retângulo que aparecerá se o fundo tiver uma cor.
fonte
Primeiro, crie um arquivo xml com o conteúdo mostrado abaixo e chame-o de border.xml e coloque-o na pasta de layout, no diretório res
Depois disso, dentro do código, use
Isso criará uma linha preta na parte superior e inferior do TextView.
fonte
Anote o código abaixo
fonte
Aqui está uma maneira de alcançá-lo.
Primeiro item para curso e segundo para plano de fundo sólido. Ocultando as bordas esquerda e direita.
fonte
A maneira mais simples de adicionar bordas para inserir as bordas usando
InsetDrawable
, a seguir mostrará apenas a borda superior:fonte
Adicionar arquivo a res / drawable
Adicionar link neste arquivo à propriedade em segundo plano
fonte
Tente agrupar a imagem com um layout linear e defina o plano de fundo com a cor da borda desejada ao redor do texto. Em seguida, defina o preenchimento na visualização de texto para a espessura desejada para sua borda.
fonte
Você também pode usar um caminho de 9 para fazer seu trabalho. Crie-o para que o pixel colorido não se multiplique em altura, mas apenas o pixel transparente.
fonte
fonte
Basta adicionar vistas na parte superior e inferior da
View
fonte
fonte
Basta adicionar este TextView abaixo do texto em que você deseja adicionar a borda
fonte
Só para fazer valer de @phreakhead e das user1051892 respostas,
<item android:bottom|android:left|android:right|android:top>
se for negativo, deve ser maior do que<stroke android:width>
. Caso contrário, a pintura do item será misturada à pintura do traçado e você poderá pensar que esses valores não estão funcionando.fonte