¿Cómo dibujar un borde en un solo lado de un diseño lineal?
Puedo dibujar el borde en un diseño lineal, pero se dibuja en todos los lados. Quiero restringirlo solo al lado derecho, como lo hace en CSS (borde-derecho: 1px rojo sólido;).
He probado esto, pero todavía dibuja por todos 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>
¿Alguna sugerencia sobre cómo lograr esto?
Por cierto, no quiero utilizar el truco de poner una vista de ancho 1dp en el lado requerido.
Puedes usar esto para obtener el borde en un lado.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#FF0000" />
</shape>
</item>
<item android:left="5dp">
<shape android:shape="rectangle">
<solid android:color="#000000" />
</shape>
</item>
</layer-list>
EDITADO
Como muchos, incluyéndome a mí, queríamos tener un borde de un lado con fondo transparente, implementé uno BorderDrawable
que podría darme bordes con diferentes tamaños y colores de la misma manera que usamos CSS. Pero esto no se pudo utilizar a través de xml. Para admitir XML, agregué un formato BorderFrameLayout
en el que se puede ajustar su diseño.
Consulte mi github para obtener la fuente completa.
Fácil como un pastel, permitiendo un bg transparente:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="0"
android:startColor="#f00"
android:centerColor="@android:color/transparent"
android:centerX="0.01" />
</shape>
Cambie el ángulo para cambiar la ubicación del borde:
- 0 = izquierda
- 90 = abajo
- 180 = correcto
- 270 = arriba
También es posible implementar lo que quieras usando una sola capa.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:bottom="-5dp"
android:right="-5dp"
android:top="-5dp">
<shape android:shape="rectangle" >
<solid android:color="@color/color_of_the_background" />
<stroke
android:width="5dp"
android:color="@color/color_of_the_border" />
</shape>
</item>
</layer-list>
De esta manera, solo el borde izquierdo es visible, pero puedes lograr cualquier combinación que desees jugando con bottom
, left
y right
los top
atributos del item
elemento.