¿Cómo poner un borde alrededor de un TextView de Android?

Resuelto yamspog asked hace 54 años • 23 respuestas

¿ Es posible dibujar un borde alrededor de un Android TextView?

yamspog avatar Jan 01 '70 08:01 yamspog
Aceptado

Puede establecer una forma dibujable (un rectángulo) como fondo para la vista.

<TextView android:text="Some text" android:background="@drawable/back"/>

Y el rectángulo dibujable back.xml (colocado en la carpeta res/drawable):

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
   <solid android:color="@android:color/white" />
   <stroke android:width="1dip" android:color="#4fa5d5"/>
</shape>

Puedes utilizar @android:color/transparentque el color sólido tenga un fondo transparente. También puedes usar relleno para separar el texto del borde. para obtener más información, consulte: http://developer.android.com/guide/topics/resources/drawable-resource.html

Konstantin Burov avatar Aug 16 '2010 18:08 Konstantin Burov

Permítanme resumir algunos métodos diferentes (no programáticos).

Usando una forma dibujable

Guarde lo siguiente como un archivo XML en su carpeta dibujable (por ejemplo, my_border.xml):

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

    <!-- View background color -->
    <solid
        android:color="@color/background_color" >
    </solid>

    <!-- View border color and width -->
    <stroke
        android:width="1dp"
        android:color="@color/border_color" >
    </stroke>

    <!-- The radius makes the corners rounded -->
    <corners
        android:radius="2dp"   >
    </corners>

</shape>

Luego simplemente configúrelo como fondo de su TextView:

<TextView
    android:id="@+id/textview1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/my_border" />

Más ayuda:

  • Forma dibujable (documentos de Android)
  • Consejos y trucos para desarrolladores de Android: elementos de diseño XML (Parte I)

Usando un parche 9

Un parche 9 es una imagen de fondo extensible. Si crea una imagen con un borde, le dará un borde a su TextView. Todo lo que necesitas hacer es crear la imagen y luego configurarla como fondo en tu TextView.

<TextView
    android:id="@+id/textview1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/my_ninepatch_image" />

Aquí hay algunos enlaces que mostrarán cómo hacer una imagen de 9 parches:

  • Dibujar 9 parches
  • Generador simple de nueve parches
  • Una guía sencilla para el parche 9 para la interfaz de usuario de Android
  • Creación y uso de imágenes de 9 parches en Android

¿Qué pasa si sólo quiero el borde superior?

Usando una lista de capas

Puede utilizar una lista de capas para apilar dos rectángulos uno encima del otro. Al hacer que el segundo rectángulo sea un poco más pequeño que el primero, puedes crear un efecto de borde. El primer rectángulo (inferior) es el color del borde y el segundo rectángulo es el color de fondo.

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

    <!-- Lower rectangle (border color) -->
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/border_color" />
        </shape>
    </item>

    <!-- Upper rectangle (background color) -->
    <item android:top="2dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/background_color" />
        </shape>
    </item>
</layer-list>

La configuración android:top="2dp"compensa la parte superior (la hace más pequeña) en 2 dp. Esto permite que se vea el primer rectángulo (inferior), dando un efecto de borde. Puedes aplicar esto al fondo de TextView de la misma manera que shapese hizo el dibujable arriba.

Aquí hay algunos enlaces más sobre listas de capas:

  • Entendiendo la <lista de capas> de Android
  • ¿Cómo hacer un borde inferior en un selector XML de forma dibujable?
  • ¿Crear bordes en una vista de Android en xml dibujable, en 3 lados?

Usando un parche 9

Puedes crear una imagen de 9 parches con un solo borde. Todo lo demás es igual a lo comentado anteriormente.

Usando una vista

Esto es una especie de truco, pero funciona bien si necesita agregar un separador entre dos vistas o un borde a un único TextView.

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textview1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <!-- This adds a border between the TextViews -->
    <View
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@android:color/black" />

    <TextView
        android:id="@+id/textview2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

Aquí hay algunos enlaces más:

  • Cómo dibujar una línea en Android
  • Cómo poner una línea divisoria horizontal entre los textos de edición en una actividad
  • ¿Cómo agregar una línea horizontal de 1 px sobre la vista de la imagen en un diseño relativo?
Suragch avatar Apr 04 '2015 10:04 Suragch