Tengo un TextView y me gustaría agregar un borde negro a lo largo de sus bordes superior e inferior. Intenté agregar android:drawableTop
y android:drawableBottom
al TextView, pero eso solo causó 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?
android
border
android-view
textview
emmby
fuente
fuente
Respuestas:
En Android 2.2 puedes hacer lo siguiente.
Cree un dibujo xml como /res/drawable/textlines.xml y asígnelo como una propiedad de fondo de TextView.
/res/drawable/textlines.xml
La desventaja de esto es que debe 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.
fuente
android:color="@null"
para evitar problemas de fondo opaco.He usado un truco para que el borde se muestre fuera del contenedor. Con este truco, solo se dibuja una línea, por lo que se mostrará el fondo de la vista subyacente.
fuente
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 puede establecer el fondo. Cree un archivo XML en la
drawable
carpeta que se vea así:Puede eliminar el
solid
si no desea un relleno. El conjuntobackground="@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 que desea dar a un borde, y luego dale 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í, te recomendaría que escribas una costumbre
BorderView
que solo dibuje el borde, solo debería ser una docena de líneas de código.Si usted se pregunta, que hace el trabajo con
adjustViewBounds=true
. Sin embargo, no funciona si quieres tener un fondo completoRelativeLayout
, porque hay un error que te impide llenar unRelativeLayout
aView
. En ese caso, recomendaría elShape
dibujable.Opción 3: 9 parches
Una última opción es usar un dibujo de 9 parches como este:
Puede usarlo en cualquier vista donde pueda configurarlo
android:background="@drawable/..."
. Y sí, tiene que ser 6x6: probé 5x5 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
dibujo , que no es muy poderoso.Opción 4: vistas adicionales
Olvidé mencionar esta opción realmente simple si solo quieres bordes arriba y abajo de tu vista. Puede poner su vista en vertical
LinearLayout
(si aún no lo está) y luego agregarView
s vacías arriba y debajo de esta manera:fuente
Para agregar un
1dp
borde blanco solo en la parte inferior y tener un fondo transparente, puede usar lo siguiente, que es más simple que la mayoría de las respuestas aquí.Para la
TextView
u otra vista, agregue:Y en el
drawable
directorio agregue el siguiente XML, llamadoborderbottom.xml
Si desea un borde en la parte superior, cambie el
android:top="-2dp"
aandroid:bottom="-2dp"
El color no necesita ser blanco y el fondo tampoco tiene que ser transparente.
El
solid
elemento puede no ser requerido. Esto dependerá de su diseño (gracias V. Kalyuzhnyu).Básicamente, este XML creará un borde con 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.
fuente
-2dp
vs1dp
)? Parece funcionar cuando son iguales en cantidad (-1
y1
).-2dp
el resultado siempre estaba limpio. Creo que hubo un caso de prueba donde el resultado no fue limpio. No recuerdo si era una pantalla de baja o alta densidad o incluso una versión anterior de Android (2.x tal vez).4dp
para el ancho del trazo, debería usarlo-8dp
para el posicionamiento?-5dp
sería todo lo que se necesita con un valor de ancho de4pd
. Simplemente necesitaba ser un poco más grande para superar la imprecisión del valor flotante.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.
Cree un xml dibujable
/res/drawable/top_bottom_borders.xml
con el siguiente código y asígnelo como una propiedad de fondo de TextView.Probado en Android KitKat a través de Marshmallow
fuente
Entonces 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:
Tenga en cuenta el uso de px en lugar de dp para obtener exactamente 1 divisor de píxeles (algunos DPI del teléfono harán desaparecer una línea de 1dp).
fuente
"@color/background_trans_light"
?Tal como dijo @Nic Hubbard, hay una manera muy fácil de agregar una línea de borde.
Puede cambiar la altura y el color de fondo a lo que desee.
fuente
Mis respuestas se basan en la versión @Emile, pero uso color transparente en lugar de sólido.
Este ejemplo dibujará un borde inferior de 2dp.
@ color / bgcolor es el color del fondo en el que dibuja su vista con borde.
Si desea cambiar la posición del borde, cambie el desplazamiento con uno de:
o combinarlos para tener 2 o más bordes:
fuente
También puede ajustar la vista en FrameLayout, luego establecer el color de fondo y el relleno del marco a lo que desee; sin embargo, la vista de texto, de manera predeterminada, tiene un fondo "transparente", por lo que también deberá cambiar el color de fondo de la vista de texto.
fuente
¿Por qué no simplemente crear una vista alta de 1dp con un color de fondo? Luego se puede colocar fácilmente donde desee.
fuente
Solo para agregar mi solución a la lista ...
Quería un borde inferior semitransparente que se extienda más allá de la forma original (por lo que el borde semitransparente estaba fuera del rectángulo principal).
Lo que me da;
fuente
Para cambiar esto:
Prefiero este enfoque en "drawable / top_bottom_border.xml":
Esto solo hace los bordes, no un rectángulo que aparecerá si su fondo tiene un color.
fuente
Primero cree un archivo xml con el contenido que se muestra a continuación, asígnele el nombre border.xml y colóquelo dentro de la carpeta de diseño dentro del directorio res
Después de eso dentro del uso del código
Esto hará una línea negra en la parte superior e inferior de TextView.
fuente
Escriba debajo del código
fuente
Aquí hay una manera de lograrlo.
Primer elemento para trazo y segundo para fondo sólido. Ocultando las fronteras izquierda y derecha.
fuente
La manera más simple de agregar bordes para insertar los bordes usando
InsetDrawable
, a continuación, mostrará solo el borde superior:fuente
Agregar archivo a res / drawable
Agregar enlace en este archivo a la propiedad de fondo
fuente
Intente ajustar la imagen con una distribución lineal y configure su fondo con el color del borde que desee alrededor del texto. Luego, configure el relleno en la vista de texto para que sea el grosor que desea para su borde.
fuente
También puede usar una ruta de 9 para hacer su trabajo. Créelo para que el píxel de color no se multiplique en altura, sino solo el píxel transparente.
fuente
fuente
Simplemente agregue Vistas en la parte superior e inferior de la
View
fuente
fuente
Simplemente agregue este TextView debajo del texto donde desea agregar el borde
fuente
Solo para hacer cumplir las respuestas de @phreakhead y user1051892 ,
<item android:bottom|android:left|android:right|android:top>
si es negativo, debe ser mayor que<stroke android:width>
. Si no, la pintura del elemento se mezclará con la pintura de trazo y puede pensar que estos valores no funcionan.fuente