¿Hay una manera fácil de agregar un borde en la parte superior e inferior de una vista de Android?

11 minutos de lectura

¿Hay una manera facil de agregar un borde en la
emby

Tengo un TextView y me gustaría agregar un borde negro a lo largo de sus bordes superior e inferior. Traté de agregar android:drawableTop y android:drawableBottom a 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, un TextView) en Android?

  • Es sorprendente que nadie haya mencionado divisorVertical ! Esta es la cosa creada por Android, para lograr, bueno, divisores verticales. No podría ser más fácil y usted hace todo en el panel WYSIWYG “Diseño” en Android Studio.

    – Gordito

    26 de junio de 2014 a las 10:52

  • nota dividerVertical se implementó en API 11.

    – JPM

    26 de febrero de 2015 a las 18:04

  • ¿Quizás puedas mostrar cómo usar dividerVertical?

    – chico androide

    24 de febrero de 2017 a las 1:50

1646749641 704 ¿Hay una manera facil de agregar un borde en la
emilio

En android 2.2 podrías hacer lo siguiente.

Cree un dibujo 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/dibujable/líneas de texto.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 debe especificar un color de fondo opaco, ya que las transparencias no funcionarán. (Al menos pensé que lo hicieron, 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.

  • También vea esta solución, que también funciona para TextViews, si desea un borde alrededor: stackoverflow.com/questions/3263611/…

    – emby

    9 de diciembre de 2010 a las 20:09

  • Intenta usar android:color="@null" para evitar problemas de fondo opaco.

    – Matt Briançon

    27 de julio de 2011 a las 11:51

  • @emmby: al probar este código en la tableta, lleva tiempo mostrarlo en la pantalla, después de 1 segundo, se muestran los bordes cuando me desplazo

    – Chetán

    3 abr 2012 a las 11:40

  • El truco android:color=”@null” no funcionó para mí para mantener la transparencia y solo mostrar un borde en un lado de la vista. ¡La respuesta del usuario 1051892 a continuación hizo el trabajo!

    – Rick Pastor

    12 de julio de 2013 a las 8:57

  • Esta solución también hizo un borde a la izquierda y a la derecha, aunque más delgado.

    – AlikElzin-kilaka

    30 de julio de 2013 a las 14:31

¿Hay una manera facil de agregar un borde en la
usuario1051892

He usado un truco para que el borde se muestre fuera del contenedor. Con este truco, solo 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>

  • Esto funcionó muy bien para mí, con algunos ajustes para hacer la línea un poco más delgada.

    – Jeff

    19/04/2013 a las 18:30

  • Muy buen truco, aunque podría ser mejor si no tenemos que engañar a la computadora para hacer las cosas.

    – Máx.

    17 de mayo de 2013 a las 2:56

  • ¡bien hecho! lo que debe observar es la izquierda, la parte superior, la derecha y la parte inferior del elemento – (ancho del trazo) dp

    – asakura89

    10 de junio de 2013 a las 2:55

  • No mostró ningún borde, solo hizo que el contenido de mi vista pareciera más pequeño 🙁

    – AlikElzin-kilaka

    30 de julio de 2013 a las 14:41


  • Bien hecho, trabajado con fondo transparente. Probado en 2.2 y 4.4.2. Debe cubrir todo en el medio 🙂

    – Humano

    27 de diciembre de 2013 a las 3:46

1646749643 864 ¿Hay una manera facil de agregar un borde en la
tigre

Para agregar un 1dp borde blanco solo en la parte inferior y para tener un fondo transparente, puede usar lo siguiente, que es más simple que la mayoría de las respuestas aquí.

Para el TextView u otra vista agregar:

android:background="@drawable/borderbottom"

Y en el drawable directorio agregue el siguiente XML, llamado borderbottom.xml

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

Si desea un borde en la parte superior, cambie el android:top="-2dp" para android:bottom="-2dp"

No es necesario que el color sea blanco y que el fondo tampoco sea transparente.

los solid Es posible que no se requiera el elemento. Esto dependerá de su diseño (gracias V. Kalyuzhnyu).

Básicamente, este XML creará un borde usando la forma del rectángulo, pero luego empujará los lados superior, derecho e izquierdo más allá del área de representación de la forma. Esto deja solo el borde inferior visible.

  • Esta es la mejor solución, ya que no crea sobregiros como los demás.

    –Greg Ennis

    06/01/2016 a las 15:00

  • ¿Hay alguna razón por la que las posiciones negativas sean dos veces más grandes que el trazo con (-2dp contra 1dp)? Parece funcionar cuando son iguales en cantidad (-1 y 1).

    – Denis Kniazhev

    18 de agosto de 2016 a las 10:53


  • @DenisKniazhev: cuando se usa -2dp el resultado siempre fue limpio. Creo que hubo un caso de prueba en el que el resultado no fue limpio. No recuerdo si era una pantalla de baja o alta densidad o incluso una versión anterior de Android (tal vez 2.x).

    – tigre

    18 de agosto de 2016 a las 11:22

  • Interesante. ¿Sabes si este es un caso general, por ejemplo si uso 4dp para el ancho del trazo debo usar -8dp para posicionamiento?

    – Denis Kniazhev

    18 de agosto de 2016 a las 12:46

  • @DenisKniazhev: (de memoria) parecía un cálculo de coma flotante que era un poco grande o pequeño. Esto significa un valor de -5dp sería todo lo que se necesita con un valor de ancho de 4pd. Simplemente necesitaba ser un poco más grande para superar la inexactitud del valor flotante.

    – tigre

    19 de agosto de 2016 a las 12:09

1646749644 866 ¿Hay una manera facil de agregar un borde en la
timmmm

Opción 1: Forma dibujable

Esta es la opción más simple si desea un borde alrededor de un diseño o vista en el que pueda configurar el fondo. Cree un archivo XML en el drawable carpeta que se parece a esto:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="#8fff93" />

    <stroke
        android:width="1px"
        android:color="#000" />

</shape>

Puedes quitar el solid si no quieres un relleno. El conjunto background="@drawable/your_shape_drawable" en su diseño/vista.

Opción 2: Vista de fondo

Aquí hay un pequeño truco que he usado en un RelativeLayout. Básicamente, tiene un cuadrado negro debajo de la vista a la que desea dar un borde, y luego le da a esa vista algo de relleno (¡no margen!) para que el cuadrado negro se vea en los bordes.

Obviamente, esto solo funciona correctamente si la vista no tiene áreas transparentes. Si es así, le recomendaría que escribiera un personalizado. BorderView que solo dibuja el borde: solo debe tener unas pocas docenas de líneas de código.

<View
    android:id="@+id/border"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/image"
    android:layout_alignLeft="@+id/image"
    android:layout_alignRight="@+id/image"
    android:layout_alignTop="@+id/main_image"
    android:background="#000" />

<ImageView
    android:id="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_...
    android:padding="1px"
    android:src="https://stackoverflow.com/questions/1598119/@drawable/..." />

Si te lo preguntas, es lo hace trabajar con adjustViewBounds=true. Sin embargo, no funciona si desea tener un fondo en todo un RelativeLayoutporque hay un error que te impide llenar un RelativeLayout con un View. En ese caso, recomendaría el Shape dibujable.

Opción 3: 9 parches

Una opción final es usar un diseño de 9 parches como este:

1646749646 969 ¿Hay una manera facil de agregar un borde en la

Puede usarlo en cualquier vista donde pueda establecer android:background="https://stackoverflow.com/questions/1598119/@drawable/...". Y sí, tiene que ser 6×6. Probé 5×5 y no funcionó.

La desventaja de este método es que no puede cambiar los colores muy fácilmente, pero si desea bordes elegantes (por ejemplo, solo un borde en la parte superior e inferior, como en esta pregunta), es posible que no pueda hacerlo con el Shape dibujable, que no es muy potente.

Opción 4: Vistas adicionales

Olvidé mencionar esta opción realmente simple si solo desea bordes arriba y abajo de su vista. Puedes poner tu vista en una vertical. LinearLayout (si aún no lo está) y luego agregue vacío Views por encima y por debajo de esta manera:

<View android:background="#000" android:layout_width="match_parent" android:layout_height="1px"/>

1646749647 238 ¿Hay una manera facil de agregar un borde en la
gregschlom

La respuesta actualmente aceptada no funciona. Crea bordes verticales delgados en los lados izquierdo y derecho de la vista como resultado del suavizado.

Esta versión funciona perfectamente. También le permite establecer los anchos de los bordes de forma independiente, y también puede agregar bordes en los lados izquierdo/derecho si lo desea. El único inconveniente es que NO admite transparencia.

Crea un dibujo xml llamado /res/drawable/top_bottom_borders.xml con el siguiente código y asígnelo como propiedad de fondo de TextView.

<?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="#DDDD00" /> <!-- border color -->
        </shape>
    </item>

    <item
        android:bottom="1dp" 
        android:top="1dp">   <!-- adjust borders width here -->
        <shape android:shape="rectangle">
            <solid android:color="#FFFFFF" />  <!-- background color -->
        </shape>
    </item>
</layer-list>

Probado en Android KitKat a través de Marshmallow

  • ¿Cómo hacer que el interior sea transparente?

    –Hitesh Sahu

    12 de julio de 2016 a las 2:16

  • @HiteshSahu Creo que la desventaja de esto es que tendrías que hacer coincidir el fondo del diseño con el fondo del widget aquí

    – chntgomez

    19 de julio de 2016 a las 16:34

1646749648 201 ¿Hay una manera facil de agregar un borde en la
cabeza de phreak

Así que quería hacer algo ligeramente diferente: un borde en la parte inferior SOLAMENTE, para simular un divisor ListView. Modifiqué la respuesta de Piet Delport y obtuve esto:

<?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="@color/background_trans_light" />    

        </shape>
   </item>

    <!-- this mess is what we have to do to get a bottom border only. -->
   <item android:top="-2dp"
         android:left="-2dp"
         android:right="-2dp"
         android:bottom="1px"> 
      <shape 
        android:shape="rectangle">    
            <stroke android:width="1dp" android:color="@color/background_trans_mid" />
            <solid android:color="@null" />
        </shape>
   </item>

</layer-list>

Tenga en cuenta el uso de px en lugar de dp para obtener exactamente un divisor de 1 píxel (algunos DPI de teléfonos harán que desaparezca una línea de 1 dp).

  • ¿Cómo hacer que el interior sea transparente?

    –Hitesh Sahu

    12 de julio de 2016 a las 2:16

  • @HiteshSahu Creo que la desventaja de esto es que tendrías que hacer coincidir el fondo del diseño con el fondo del widget aquí

    – chntgomez

    19 de julio de 2016 a las 16:34

¿Hay una manera facil de agregar un borde en la
matez

Tal como dijo @Nic Hubbard, hay una manera muy fácil de agregar una línea de borde.

<View
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:background="#000000" >
</View>

Puedes cambiar la altura y el color de fondo a lo que quieras.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad