@whyoz Su método agrega complejidad innecesaria para ver la jerarquía. Necesitará dos vistas adicionales (un contenedor de diseño y la vista de borde) para usar su método. Por lo tanto, si tiene muchas vistas a las que necesita agregar bordes, su árbol de vistas se volverá inmanejable.
Konstantin Burov
55
@whyoz, sin embargo, este método puede aplicarse a través de estilos y temas, mientras que el método de YongGu no puede usarse de esta manera.
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"?><shapexmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><!-- View background color --><solidandroid:color="@color/background_color"></solid><!-- View border color and width --><strokeandroid:width="1dp"android:color="@color/border_color"></stroke><!-- The radius makes the corners rounded --><cornersandroid:radius="2dp"></corners></shape>
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 necesita hacer es crear la imagen y luego establecerla en segundo plano en su TextView.
Puede usar 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 primer rectángulo, puede 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.
El ajuste android:top="2dp"compensa la parte superior (la hace más pequeña) en 2dp. Esto permite que se muestre el primer rectángulo (inferior), dando un efecto de borde. Puede aplicar esto al fondo TextView de la misma manera queshape se realizó anterior.
Aquí hay algunos enlaces más sobre listas de capas:
Simplemente puede hacer una imagen de 9 parches con un solo borde. Todo lo demás es igual a lo discutido anteriormente.
Usar una vista
Esto es una especie de truco, pero funciona bien si necesita agregar un separador entre dos vistas o un borde a un solo TextView.
<LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/textview1"android:layout_width="match_parent"android:layout_height="wrap_content"/><!-- This adds a border between the TextViews --><Viewandroid:layout_width="match_parent"android:layout_height="2dp"android:background="@android:color/black"/><TextViewandroid:id="@+id/textview2"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>
Dios mío, border: 1px solid #999;se supone que a no es tan complicado.
Achshar
¿Qué sucede si quiero un borde de la vista de texto, que también tiene efecto de sombra y ondulación?
Akash Dubey
@AkashDubey, lo siento, no he hecho eso antes. Le sugiero que pruebe cada uno por separado y luego los combine. Si se atasca, haga una nueva pregunta sobre Desbordamiento de pila.
Suragch
49
La manera simple es agregar una vista para su TextView. Ejemplo para la línea del borde inferior:
Según mi experiencia, esta solución, en dispositivos antiguos, tiene un impacto visible y silencioso en el rendimiento de la aplicación.
Roberto Lombardini
43
Esta es una solución horrible desde el punto de vista de la inflación. Crea 3 nuevos elementos de vista y agrega un nivel más en la profundidad de la jerarquía de vista
philipp
La peor solución debido a la perspectiva de la inflación vista como dijo philipp. ¿Sabe que textView tiene una etiqueta xml específica para hacer eso ?: defina una imagen para dibujar a la izquierda / derecha / arriba / abajo en su TextView, y se conocen como android: drawable ****
Mathias Seguy Android2ee
32
He resuelto este problema extendiendo la vista de texto y dibujando un borde manualmente. Incluso agregué para que pueda seleccionar si un borde está punteado o punteado.
¿Es posible aplicar esto a todas las vistas de texto desde un solo lugar?
Ian Warburton
Agradable para un rapidito. Pero dependiendo de la versión del dispositivo en ejecución, esto puede tener efectos muy inusuales. Esto se debe a que Google sigue cambiando el aspecto de EditTexts (¡tienes que estar a la moda!)
Scott Biggs
11
Encontré una mejor manera de poner un borde alrededor de un TextView.
Use una imagen de nueve parches para el fondo. Es bastante simple, el SDK viene con una herramienta para hacer la imagen de 9 parches, y no implica absolutamente nada codificación.
Usar una forma como dice la respuesta aceptada es mejor que un parche de 9, un archivo XML es más flexible que un recurso gráfico
Jose_GD 12/12/2013
Claro, si desea limitarse a crear los gráficos que desea mediante programación, entonces es más flexible.
Nick
2
El enfoque de la forma es inútil. Tal vez soy el único que experimenta, que la etiqueta "sólido" siempre se procesa, sin importar si se establece como transparente o no. Y si quiero crear una FRONTERA, quiero decir, una FRONTERA y no un rectángulo con bordes interiores coloreados y de otro color. Y NUNCA es sólido transparente. Siempre perturba el color. Además, una clase, que hereda de otra, también debe tener todas las características, porque se hereda. Realmente no puedo entender por qué Android rompe las pautas de diseño OO elementales. Por ejemplo, heredé del botón. Todas las características desaparecieron. Por qué ?
icbytes
2
@Jeremie ¿Visiblemente más lento? ¿Cómo lo observas?
La carpeta dibujable, en resolución, en un proyecto de Android no está restringida a mapas de bits (archivos PNG o JPG), pero también puede contener formas definidas en archivos XML.
Estas formas se pueden reutilizar en el proyecto. Se puede usar una forma para poner un borde alrededor de un diseño. Este ejemplo muestra un borde rectangular con esquinas curvas. Se crea un nuevo archivo llamado customborder.xml en la carpeta dibujable (en Eclipse use el menú Archivo y seleccione Nuevo luego Archivo, con la carpeta dibujable, escriba el nombre del archivo y haga clic en Finalizar).
El atributo android:shapese establece en rectángulo (los archivos de forma también admiten óvalo, línea y anillo). Rectángulo es el valor predeterminado, por lo que este atributo podría omitirse si se está definiendo un rectángulo. Consulte la documentación de Android sobre formas en http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape para obtener información detallada sobre un archivo de formas.
Las esquinas del elemento configuran las esquinas del rectángulo que se redondearán. Es posible establecer un radio diferente en cada esquina (consulte la referencia de Android).
Los atributos de relleno se utilizan para mover el contenido de la Vista a la que se aplica la forma, para evitar que el contenido se superponga al borde.
El color del borde aquí se establece en gris claro (valor RGB hexadecimal).
Las formas también admiten gradientes, pero eso no se usa aquí. Nuevamente, vea los recursos de Android para ver cómo se define un gradiente. La forma se aplica al laypout usandoandroid:background="@drawable/customborder" .
Dentro del diseño, se pueden agregar otras vistas de forma normal. En este ejemplo, se ha agregado un único TextView y el texto es blanco (FFFFFF hexadecimal RGB). El fondo se establece en azul, más algo de transparencia para reducir el brillo (valor alfa RGB hexadecimal A00000FF). Finalmente, el diseño se compensa desde el borde de la pantalla colocándolo en otro diseño con una pequeña cantidad de relleno. El archivo de diseño completo es así:
Las respuestas de solo enlace están altamente desaconsejadas, ya que los enlaces tienden a romperse en algún momento en el futuro. Incluya partes relevantes de su enlace en esta respuesta para que la información permanezca disponible, incluso si el enlace no lo tiene.
Andy
8
Tengo una manera de hacerlo muy simple, y me gustaría compartirlo.
Cuando quiero cuadrar mis TextViews, solo las pongo en un LinearLayout. Establezco el color de fondo de mi LinearLayout y agrego un margen a mi TextView. El resultado es exactamente como si cuadraras el TextView.
Puede crear un fondo personalizado para su vista de texto. Pasos 1. Vaya a su proyecto. 2. Vaya a recursos y haga clic derecho en dibujable. 3. Haga clic en Nuevo -> Archivo de recursos dibujables 4. Asigne un nombre al archivo 5. Pegue el siguiente código en el archivo
Cree una vista de borde con el color de fondo como el color del borde y el tamaño de su vista de texto. establecer el relleno de vista de borde como el ancho del borde. Establezca el color de fondo de la vista de texto como el color que desea para la vista de texto. Ahora agregue su vista de texto dentro de la vista de borde.
Hay muchas formas de agregar un borde a textView. El más simple es creando un dibujo personalizado y configurándolo como android:background="@drawable/textview_bg"para su textView.
Textview_bg.xml irá debajo de Drawables y puede ser algo como esto. Puede tener un solido un gradientfondo (o nada si no es necesario), cornerspara agregar un radio de esquina ystroke agregar borde.
En realidad, es muy simple. Si desea un rectángulo negro simple detrás de la vista de texto, simplemente agregue android:background="@android:color/black"dentro de las etiquetas TextView. Me gusta esto:
Respuestas:
Puede establecer una forma dibujable (un rectángulo) como fondo para la vista.
Y rectángulo dibujable back.xml (poner en la carpeta res / drawable):
Puede usar
@android:color/transparent
para que el color sólido tenga un fondo transparente. También puede usar relleno para separar el texto del borde. Para obtener más información, consulte: http://developer.android.com/guide/topics/resources/drawable-resource.htmlfuente
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):
Luego, configúrelo como el fondo de su TextView:
Más ayuda:
Usando un parche de 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 necesita hacer es crear la imagen y luego establecerla en segundo plano en su TextView.
Aquí hay algunos enlaces que mostrarán cómo hacer una imagen de 9 parches:
¿Qué pasa si solo quiero el borde superior?
Usando una lista de capas
Puede usar 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 primer rectángulo, puede 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.
El ajuste
android:top="2dp"
compensa la parte superior (la hace más pequeña) en 2dp. Esto permite que se muestre el primer rectángulo (inferior), dando un efecto de borde. Puede aplicar esto al fondo TextView de la misma manera queshape
se realizó anterior.Aquí hay algunos enlaces más sobre listas de capas:
Usando un parche de 9
Simplemente puede hacer una imagen de 9 parches con un solo borde. Todo lo demás es igual a lo discutido anteriormente.
Usar una vista
Esto es una especie de truco, pero funciona bien si necesita agregar un separador entre dos vistas o un borde a un solo TextView.
Aquí hay algunos enlaces más:
fuente
border: 1px solid #999;
se supone que a no es tan complicado.La manera simple es agregar una vista para su TextView. Ejemplo para la línea del borde inferior:
Para los otros bordes de dirección, ajuste la ubicación de la vista del separador.
fuente
He resuelto este problema extendiendo la vista de texto y dibujando un borde manualmente. Incluso agregué para que pueda seleccionar si un borde está punteado o punteado.
Y la clase fronteriza:
Espero que esto ayude a alguien :)
fuente
Solo estaba mirando una respuesta similar: se puede hacer con un derrame cerebral y la siguiente anulación:
fuente
Puede establecer el borde por dos métodos. Uno es dibujable y el segundo es programático.
Usando Drawable
Programático
fuente
La solución más simple que he encontrado (y que realmente funciona):
fuente
Encontré una mejor manera de poner un borde alrededor de un TextView.
Use una imagen de nueve parches para el fondo. Es bastante simple, el SDK viene con una herramienta para hacer la imagen de 9 parches, y no implica absolutamente nada codificación.
El enlace es http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch .
fuente
Puede agregar algo como esto en su código:
fuente
Consulte el siguiente enlace para hacer esquinas redondeadas http://androidcookbook.com/Recipe.seam?recipeId=2318
La carpeta dibujable, en resolución, en un proyecto de Android no está restringida a mapas de bits (archivos PNG o JPG), pero también puede contener formas definidas en archivos XML.
Estas formas se pueden reutilizar en el proyecto. Se puede usar una forma para poner un borde alrededor de un diseño. Este ejemplo muestra un borde rectangular con esquinas curvas. Se crea un nuevo archivo llamado customborder.xml en la carpeta dibujable (en Eclipse use el menú Archivo y seleccione Nuevo luego Archivo, con la carpeta dibujable, escriba el nombre del archivo y haga clic en Finalizar).
Se ingresa el XML que define la forma del borde:
El atributo
android:shape
se establece en rectángulo (los archivos de forma también admiten óvalo, línea y anillo). Rectángulo es el valor predeterminado, por lo que este atributo podría omitirse si se está definiendo un rectángulo. Consulte la documentación de Android sobre formas en http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape para obtener información detallada sobre un archivo de formas.Las esquinas del elemento configuran las esquinas del rectángulo que se redondearán. Es posible establecer un radio diferente en cada esquina (consulte la referencia de Android).
Los atributos de relleno se utilizan para mover el contenido de la Vista a la que se aplica la forma, para evitar que el contenido se superponga al borde.
El color del borde aquí se establece en gris claro (valor RGB hexadecimal).
Las formas también admiten gradientes, pero eso no se usa aquí. Nuevamente, vea los recursos de Android para ver cómo se define un gradiente. La forma se aplica al laypout usando
android:background="@drawable/customborder"
.Dentro del diseño, se pueden agregar otras vistas de forma normal. En este ejemplo, se ha agregado un único TextView y el texto es blanco (FFFFFF hexadecimal RGB). El fondo se establece en azul, más algo de transparencia para reducir el brillo (valor alfa RGB hexadecimal A00000FF). Finalmente, el diseño se compensa desde el borde de la pantalla colocándolo en otro diseño con una pequeña cantidad de relleno. El archivo de diseño completo es así:
fuente
Tengo una manera de hacerlo muy simple, y me gustaría compartirlo.
Cuando quiero cuadrar mis TextViews, solo las pongo en un LinearLayout. Establezco el color de fondo de mi LinearLayout y agrego un margen a mi TextView. El resultado es exactamente como si cuadraras el TextView.
fuente
Cambiar la respuesta de Konstantin Burov porque no funciona en mi caso:
compileSdkVersion 26 (Android 8.0), minSdkVersion 21 (Android 5.0), targetSdkVersion 26, implementación 'com.android.support:appcompat-v7:26.1.0', gradle: 4.1
fuente
Puede crear un fondo personalizado para su vista de texto. Pasos 1. Vaya a su proyecto. 2. Vaya a recursos y haga clic derecho en dibujable. 3. Haga clic en Nuevo -> Archivo de recursos dibujables 4. Asigne un nombre al archivo 5. Pegue el siguiente código en el archivo
Para su vista de texto donde desea usarlo como fondo,
android: background = "@ drawable / your_fileName"
fuente
Aquí está mi clase auxiliar 'simple' que devuelve un ImageView con el borde. Simplemente suelte esto en su carpeta de utilidades y llámelo así:
Aquí está el código.
fuente
selectionBorder
?Esto puede ayudarte.
fuente
Cree una vista de borde con el color de fondo como el color del borde y el tamaño de su vista de texto. establecer el relleno de vista de borde como el ancho del borde. Establezca el color de fondo de la vista de texto como el color que desea para la vista de texto. Ahora agregue su vista de texto dentro de la vista de borde.
fuente
Prueba esto:
fuente
Hay muchas formas de agregar un borde a textView. El más simple es creando un dibujo personalizado y configurándolo como
android:background="@drawable/textview_bg"
para su textView.Textview_bg.xml irá debajo de Drawables y puede ser algo como esto. Puede tener un
solid
o ungradient
fondo (o nada si no es necesario),corners
para agregar un radio de esquina ystroke
agregar borde.textview_bg.xml
fuente
este código lo puedes colocar donde quieras
fuente
setBackground en su vista de texto xml,
agregue el archivo rounded_textview.xml a su directorio dibujable.
establecer archivo dibujable en textView background.
fuente
En realidad, es muy simple. Si desea un rectángulo negro simple detrás de la vista de texto, simplemente agregue
android:background="@android:color/black"
dentro de las etiquetas TextView. Me gusta esto:fuente