android - propiedades - Forma dibujable como fondo, una línea en la parte inferior
propiedades shape android (5)
Así es como obtuve una línea en el fondo para la mía. Dibuja un trazo pero luego mueve el elemento hacia arriba y hacia los lados para que la parte superior y los lados no muestren el trazo:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="-6dp" android:left="-6dp" android:right="-6dp">
<shape>
<solid android:color="#2b7996"/>
<stroke android:color="#33b5e5" android:width="6dp"/>
</shape>
</item>
</layer-list>
Estoy usando un dibujable como fondo de un TextView solo para tener una línea divisoria debajo del texto. Lo logró con este drawable-xml:
<?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="#FFDDDDDD" />
<gradient
android:angle="0"
android:startColor="#FFAAAAAA"
android:endColor="#FFEEEEEE"
/>
</shape>
</item>
<item android:bottom="2dp">
<shape
android:shape="rectangle">
<solid android:color="#FF000000" />
</shape>
</item>
</layer-list>
Pero este método dibuja un rectángulo de color sobre un rectángulo negro. Me gustaría tener solo la línea en la parte inferior de la forma sin rectángulo negro porque el negro no es transparente. ¿Cómo podría lograr eso?
Con esta solución donde quiera que requiera una línea diferente, puede hacerlo. Mi requisito solo estaba subrayado. Incluso usted puede dar diferentes colores al diseño. Puedes ver en la imagen de abajo, línea blanca
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="-5dp" android:left="-5dp" android:right="-5dp">
<shape>
<solid android:color="@android:color/transparent"/>
<stroke android:color="@color/white" android:width="5dp"/>
</shape>
</item>
<item android:top="-5dp" android:bottom="-5dp" android:right="-5dp">
<shape>
<solid android:color="@android:color/transparent"/>
<stroke android:color="@color/colorPrimaryDark" android:width="5dp"/>
</shape>
</item>
<item android:bottom="-5dp" android:left="-5dp" android:right="-5dp">
<shape>
<solid android:color="@android:color/transparent"/>
<stroke android:color="@color/colorPrimaryDark" android:width="5dp"/>
</shape>
</item>
<item android:top="-5dp" android:left="-5dp" android:bottom="-5dp">
<shape>
<solid android:color="@android:color/transparent"/>
<stroke android:color="@color/colorPrimaryDark" android:width="5dp"/>
</shape>
</item>
<item android:bottom="2dp" android:left="5dp" android:right="5dp" android:top="5dp">
<shape>
<solid android:color="@color/colorPrimary"/>
<corners android:bottomRightRadius="0dp"
android:bottomLeftRadius="0dp"
android:topLeftRadius="0dp"
android:topRightRadius="0dp" />
</shape>
</item>
</layer-list>
Creo que es una mejor solución:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:gravity="bottom">
<shape>
<size android:height="1dp" />
<solid android:color="#000000" />
</shape>
</item>
</layer-list>
En general, intento desordenar lo menos posible con fondos a menos que sea absolutamente necesario, ya que hacerlo anula los colores de fondo predeterminados que tienen estados para enfocar, presionar, etc. Sugiero simplemente usar una vista adicional (en LinearLayout vertical) que es tan grueso como lo necesites. Por ejemplo:
<View
android:background="#FF000000"
android:layout_height="2dp"
android:layout_width="fill_parent"/>
Por lo general, para tareas similares: he creado una lista de capas dibujable como esta:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/underlineColor"/>
</shape>
</item>
<item android:bottom="3dp">
<shape android:shape="rectangle">
<solid android:color="@color/buttonColor"/>
</shape>
</item>
La idea es que primero dibujes el rectángulo con underlineColor y luego, sobre este, dibujas otro rectángulo con el realColor pero aplicando bottomPadding. Siempre funciona
Pero cuando necesitaba que buttonColor fuera transparente, no podía usar el dibujo anterior. Encontré una solución más
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent"/>
</shape>
</item>
<item android:drawable="@drawable/white_box" android:gravity="bottom" android:height="2dp"/>
</layer-list>
(como se puede ver aquí, mainButtonColor es transparente y white_box es simplemente un rectángulo dibujable con Solid blanco)