¿Cómo poner un borde alrededor de un TextView de Android?
¿ Es posible dibujar un borde alrededor de un Android TextView
?
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/transparent
que 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
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 shape
se 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?