Sou capaz de desenhar uma borda em um layout linear, mas está sendo desenhada por todos os lados. Quero restringi-lo apenas ao lado direito, como você faz em CSS (borda direita: 1px vermelho sólido;).
Eu tentei isso, mas ainda atrai por todos os lados:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle" >
<stroke
android:height="2dp"
android:width="2dp"
android:color="#FF0000" />
<solid android:color="#000000" />
<padding
android:bottom="0dp"
android:left="0dp"
android:right="1dp"
android:top="0dp" />
<corners
android:bottomLeftRadius="0dp"
android:bottomRightRadius="5dp"
android:radius="1dp"
android:topLeftRadius="5dp"
android:topRightRadius="0dp" />
</shape>
</item>
Alguma sugestão de como fazer isso?
BTW, eu não quero usar o hack de colocar uma visão de 1dp de largura no lado necessário.
Respostas:
Você pode usar isso para obter uma borda de um lado
EDITADO
Como muitos de mim gostariam de ter uma borda de um lado com fundo transparente, eu implementei uma
BorderDrawable
que poderia me dar bordas com tamanho e cor diferentes da mesma maneira que usamos css. Mas isso não pôde ser usado via xml. Para dar suporte ao XML, adicionei umBorderFrameLayout
no qual seu layout pode ser agrupado.Veja meu github para a fonte completa.
fonte
Fácil como torta, permitindo uma BG transparente:
Altere o ângulo para alterar a localização da borda:
fonte
também é possível implementar o que você deseja usando uma única camada
Desta forma única fronteira esquerda é visível, mas você pode conseguir qualquer combinação desejada, jogando com
bottom
,left
,right
etop
atributos doitem
elementofonte
Para obter uma borda em apenas um lado de um drawable, aplique um negativo
inset
nos outros 3 lados (fazendo com que essas bordas sejam desenhadas fora da tela).Essa abordagem é semelhante à resposta de naykah, mas sem o uso de a
layer-list
.fonte
insertX
no topo para decidir quais bordas mostrar e quais não.Como alternativa (se você não quiser usar o plano de fundo), poderá fazê-lo facilmente, exibindo da seguinte maneira:
Por ter apenas uma borda direita, coloque-o após o layout (onde você deseja colocar a borda):
Por ter apenas uma borda esquerda, coloque-a antes do layout (onde você deseja colocar a borda):
Trabalhou para mim ... Espero que seja de alguma ajuda ....
fonte
Consegui alcançar o efeito com o seguinte código
Você pode ajustar as suas necessidades de posição da borda alterando a direção do deslocamento
fonte
fonte
Outro ótimo exemplo
fonte
Não há menção sobre arquivos com nove patches aqui. Sim, você precisa criar o arquivo, no entanto, é um trabalho bastante fácil e é realmente uma solução " compatível com várias versões e transparência ". Se o arquivo for colocado no
drawable-nodpi
diretório, ele funcionará compx
base edrawable-mdpi
funcionará aproximadamente como dp base (graças à nova amostra).O arquivo de exemplo da pergunta original ( borda direita: 1px vermelho sólido; ) está aqui:
http://ge.tt/517ZIFC2/v/3?c
Basta colocá-lo no
drawable-nodpi
diretóriofonte
Fronteiras de cores diferentes. Eu usei 3 itens.
fonte