¿Carrera abierta de Android?

¿Es posible crear un objeto con forma de Android con trazo en sólo ciertos lados?

Por ejemplo, tengo:

<stroke android:width="3dip" android:color="#000000" android:dashWidth="10dip" android:dashGap="6dip" /> 

Que es similar a este CSS:

 border: 3px dashed black; 

¿Cómo puedo configurar el trazo en un solo lado? Así es como lo haría en CSS:

 border-left: 3px dashed black; 

¿Cómo lo haces en Android XML?

He logrado 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 sigue siendo un color de trazo abierto (en mi caso sólo necesitaba una línea de fondo). Si usted necesita un color de fondo usted puede agregar un color sólido de la forma como en respuesta de Maragues.

EDITAR 1

A veces, para dispositivos de Alta Densidad, el uso de valores bajos de inmersión puede terminar en trazos o distancias muy delgados o invisibles. Esto también puede ocurrir cuando establece divisores ListView.

La solución más sencilla es utilizar una distancia de 1px en lugar de 1dp. Esto hará que la línea siempre sea visible a 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

Diversión, pero traté de usar esto 6 años más tarde y no puedo obtener un buen resultado en los dispositivos Lollipop.

Probablemente la solución actual es usar 9 parches. Android debería haber hecho una solución fácil para este problema después de todo este tiempo.

He resuelto esto mediante una lista de capa, la combinación de dos formas, una de las cuales con la altura 1dp colocado en la parte inferior

Optionscreen_bottomrectangle.xml:

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- This is the line --> <item> <shape> <solid android:color="#535353" /> </shape> </item> <!-- This is the main color --> <item android:bottom="1dp"> <shape> <solid android:color="#252525" /> </shape> </item> </layer-list> 

Luego, en el archivo layout / main.xml

 <TextView android:id="@+id/bottom_rectangle" android:background="@drawable/optionscreen_bottomrectangle" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_below="@id/table_options" android:layout_above="@id/exit_bar"/> 

Que llena la brecha entre table_options y exit_bar con un fondo y justo antes de exit_bar imprime una línea 1dp. Esto hizo el truco para mí, espero que ayude a alguien más.

Respuesta editada para colocar capas en el orden correcto. ¡Thx Alex!

Otra toma en las otras respuestas usando relleno en su lugar. Este pequeño snipplet hace un borde en la parte superior e inferior.

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- This is the line --> <item> <shape> <padding android:left="0dp" android:top="1dp" android:right="0dp" android:bottom="1dp"/> <solid android:color="#898989" /> </shape> </item> <!-- This is the main color --> <item> <shape> <solid android:color="#ffffff" /> </shape> </item> </layer-list> 

@ La respuesta de Maragues es hacia atrás, ya que los drawables de la lista de capas dibujan de arriba a abajo (lo que significa que el último elemento de la lista está dibujado en la parte superior):

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- This is the line --> <item> <shape> <solid android:color="#535353" /> </shape> </item> <!-- This is the main color --> <item android:bottom="1dp"> <shape> <solid android:color="#252525" /> </shape> </item> </layer-list> 

Esto llenará eficazmente la forma con el color de la línea, después dibujará el color del fondo encima de él, dejando el último 1dp claro para que el color de la línea muestre a través.

Sé que esta pregunta fue publicada hace mucho tiempo, por lo que la respuesta no será utilizada por la persona que publicó esta pregunta, pero puede ayudar a otros.

  <?xml version="1.0" encoding="UTF-8"?> <!-- inset is used to remove border from top, it can remove border from any other side--> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetTop="-2dp" > <shape xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rectangle"> <stroke android:width="1dp" android:color="#b7b7b7" /> <corners android:bottomRightRadius="5dp" android:bottomLeftRadius="5dp"/> <solid android:color="#454444"/> </shape> </inset> 

Utilice la etiqueta de inset y proporcione un valor negativo para el borde lateral que desea quitar.

Los posibles valores son:

android:insetTop="-1dp" android:insetBottom="-1dp" android:insetLeft="-1dp" android:insetRight="-1dp"

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle" > <stroke android:width="2dp" android:color="#BBBBBB" /> <solid android:color="@android:color/transparent" /> </shape> </item> <item android:bottom="2dp" > <shape android:shape="rectangle" > <stroke android:width="2dp" android:color="@color/main_background_color" /> <solid android:color="@android:color/transparent" /> </shape> </item> 

He utilizado código siguiente.

 <?xml version="1.0" encoding="UTF-8"?> <!-- inset is used to remove border from top, it can remove border from any other side--> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetTop="-2dp" android:insetLeft="-2dp" android:insetRight="-2dp" > <shape xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rectangle"> <stroke android:width="1dp" android:color="@color/colorPrimary" /> <solid android:color="#0000"/> <padding android:left="2dp" android:top="2dp" android:bottom="2dp" android:right="2dp"/> </shape> </inset> 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.