¿Cómo dibujar un borde en un solo lado de un diseño lineal?

Resuelto Nitin Bansal asked hace 54 años • 11 respuestas

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.

Nitin Bansal avatar Jan 01 '70 08:01 Nitin Bansal
Aceptado

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 BorderDrawableque 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 BorderFrameLayouten el que se puede ajustar su diseño.

Consulte mi github para obtener la fuente completa.

Vivek Khandelwal avatar Feb 09 '2012 14:02 Vivek Khandelwal

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
Oded Breiner avatar May 20 '2014 08:05 Oded Breiner

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, lefty rightlos topatributos del itemelemento.

Viktor Grekov avatar Jan 15 '2014 19:01 Viktor Grekov