Logré una buena solución con este:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- This is the line -->
<item android:top="-1dp" android:right="-1dp" android:left="-1dp">
<shape>
<solid android:color="@android:color/transparent" />
<stroke android:width="1dp" android:color="#ffffff" />
</shape>
</item>
</layer-list>
Esto funciona bien en caso de que necesite un fondo transparente pero aún un color de trazo abierto (en mi caso, solo necesitaba una línea de fondo). Si necesita un color de fondo, puede agregar un color de forma sólida como en la respuesta de Maragues.
EDITAR 1
A veces, para dispositivos de alta densidad, el uso de valores de inmersión bajos puede terminar en trazos o distancias muy delgados o invisibles. Esto puede sucederle también al configurar divisores ListView.
La solución alternativa más sencilla es utilizar una distancia de 1 px en lugar de 1 dp. Esto hará que la línea sea siempre visible en todas las densidades. La mejor solución sería crear recursos de dimensión para cada densidad, para obtener el mejor tamaño para cada dispositivo.
Editar 2
Divertido, pero intenté usar esto 6 años después y no puedo obtener un buen resultado en los dispositivos Lollipop.
Probablemente la solución actual sea utilizar 9 parches. Android debería haber sido una solución fácil para este problema después de todo este tiempo.
Sé que esta pregunta se publicó hace mucho tiempo, por lo que la persona que publicó esta pregunta no usará la respuesta, pero aún puede ayudar a otros.
Utilice la
inset
etiqueta y asigne un valor negativo al borde lateral que desea eliminar.Los posibles valores son:
android:insetTop="-1dp" android:insetBottom="-1dp" android:insetLeft="-1dp" android:insetRight="-1dp"
fuente
Resolví esto usando una capa de lista, combinando dos formas, una de las cuales con una altura de 1 dp colocada en la parte inferior
optionscreen_bottomrectangle.xml:
Luego, en el archivo layout / main.xml
Lo que llena el espacio entre table_options y exit_bar con un fondo y justo antes de exit_bar imprime una línea de 1dp. Esto funcionó para mí, espero que ayude a alguien más.
Respuesta editada para colocar capas en el orden correcto. ¡Gracias Alex!
fuente
Otra toma de las otras respuestas usando relleno en su lugar. Este pequeño chuletón hace un borde en la parte superior e inferior.
fuente
La respuesta de @ Maragues es al revés, ya que los elementos de diseño de la lista de capas se dibujan de arriba a abajo (lo que significa que el último elemento de la lista se dibuja en la parte superior):
Esto llenará efectivamente la forma con el color de la línea, luego dibujará el color de fondo encima, dejando el último 1dp claro para que se vea el color de la línea.
fuente
fuente
He usado el siguiente código.
fuente
Simple y eficiente
Para tener una vista transparente y todo lo que está afuera tiene una superposición de algún color, lo que puede hacer es construir las vistas que encapsulan la vista central sin que las vistas externas pisen la vista central .
De esta forma, evita tener un dibujable externo al diseño y tiene más control sobre las distancias de las vistas sin tener que realizar cálculos en tiempo de ejecución.
GL
fuente