¿Existe una manera sencilla de agregar un borde en la parte superior e inferior de una vista de Android?

Resuelto emmby asked hace 54 años • 25 respuestas

Tengo un TextView y me gustaría agregar un borde negro a lo largo de sus bordes superior e inferior. Intenté agregar android:drawableTopy android:drawableBottoma TextView, pero eso solo provocó que toda la vista se volviera negra.

<TextView
    android:background="@android:color/green"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:drawableTop="@android:color/black"
    android:drawableBottom="@android:color/black"
    android:text="la la la" />

¿Hay alguna manera de agregar fácilmente un borde superior e inferior a una Vista (en particular, una Vista de Texto) en Android?

emmby avatar Jan 01 '70 08:01 emmby
Aceptado

En Android 2.2 puedes hacer lo siguiente.

Cree un elemento de diseño xml como /res/drawable/textlines.xml y asígnelo como propiedad de fondo de TextView.

<TextView
android:text="My text with lines above and below"
android:background="@drawable/textlines"
/>

/res/drawable/textlines.xml

<?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:width="1dp" android:color="#FF000000" />
            <solid android:color="#FFDDDDDD" />

        </shape>
   </item>

   <item android:top="1dp" android:bottom="1dp"> 
      <shape 
        android:shape="rectangle">
            <stroke android:width="1dp" android:color="#FFDDDDDD" />
            <solid android:color="#00000000" />
        </shape>
   </item>

</layer-list>

La desventaja de esto es que debes especificar un color de fondo opaco, ya que las transparencias no funcionarán. (Al menos pensé que sí, pero me equivoqué). En el ejemplo anterior, puede ver que el color sólido de la primera forma #FFdddddd se copia en el color del trazo de la segunda forma.

Emile avatar Nov 30 '2010 11:11 Emile

Utilicé un truco para que el borde se muestre fuera del contenedor. Con este truco sólo se dibuja una línea para que se muestre el fondo de la vista subyacente.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:bottom="1dp"
        android:left="-2dp"
        android:right="-2dp"
        android:top="-2dp">
        <shape android:shape="rectangle" >
            <stroke
                android:width="1dp"
                android:color="#FF000000" />

            <solid android:color="#00FFFFFF" />

            <padding android:left="10dp"
                android:right="10dp"
                android:top="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

</layer-list>
user1051892 avatar May 24 '2012 07:05 user1051892