Un recurso de elementos de diseño es un concepto general que hace referencia a un gráfico que se puede dibujar en la pantalla y que puedes obtener con APIs como getDrawable(int)
o aplicar a otro recurso XML mediante atributos como android:drawable
y android:icon
.
Existen varios tipos de elementos de diseño:
- Archivo de mapa de bits
-
- Es un archivo de gráficos de mapa de bits (PNG, WEBP, JPG o GIF).
Crea un
BitmapDrawable
.
- Archivo nine-patch
- Es un archivo PNG con regiones expandibles que permiten que las imágenes cambien de tamaño según el contenido (
.9.png
). Crea un NinePatchDrawable
.
- Lista de capas
- Es un elemento de diseño que administra un array de otros elementos de diseño. Estos elementos se dibujan en el orden del array: el elemento con el índice más grande se dibuja encima. Crea un
LayerDrawable
.
- Lista de estados
- Es un archivo en formato XML que hace referencia a distintos gráficos de mapa de bits para diferentes estados (por ejemplo, para usar otra imagen cuando se presiona un botón).
Crea un
StateListDrawable
.
- Lista de niveles
- Es un archivo en formato XML que define un elemento de diseño capaz de administrar varios elementos de diseño alternativos, cada uno con un valor numérico máximo. Crea un
LevelListDrawable
.
- Elemento de diseño de transición
- Es un archivo en formato XML que define un elemento de diseño capaz de fundirse entre dos recursos de elementos de diseño.
Crea un
TransitionDrawable
.
- Elemento de diseño de inserción
- Es un archivo en formato XML que define un elemento de diseño capaz de insertar otro elemento de diseño según una distancia específica.
Resulta útil cuando una vista requiere un elemento de diseño de fondo de dimensiones inferiores a los límites reales de ella.
- Elemento de diseño de recorte
- Es un archivo en formato XML que define un elemento de diseño capaz de recortar otro elemento de diseño según el valor de nivel actual de este. Crea un
ClipDrawable
.
- Elemento de diseño de escala
- Es un archivo en formato XML que define un elemento de diseño capaz de cambiar el tamaño de otro elemento de diseño según su valor de nivel actual. Crea un
ScaleDrawable
.
- Elemento de diseño de forma
- Es un archivo en formato XML que define una forma geométrica, con sus colores y gradientes.
Crea un
GradientDrawable
.
Si deseas obtener información para crear un AnimationDrawable
, consulta el documento Recursos de animación.
Nota: Un recurso de color también se puede usar como un elemento de diseño en XML. Por ejemplo, cuando creas un elemento de diseño de lista de estados, puedes hacer referencia a un recurso de color para el atributo android:drawable
(android:drawable="@color/green"
).
Mapa de bits
Una imagen de mapa de bits. Android admite archivos de mapas de bits en los siguientes formatos: PNG (recomendable), WEBP (recomendable, requiere el nivel de API 17 o uno superior), JPG (aceptable) y GIF (no recomendable).
Puedes hacer referencia a un archivo de mapa de bits de forma directa con el nombre del archivo como ID del recurso o crear un ID de recurso de alias en XML.
Nota: Durante el proceso de compilación, la herramienta aapt
podría optimizar automáticamente los archivos de mapa de bits mediante compresión de imágenes sin pérdida. Por ejemplo, un archivo PNG con color verdadero que no requiera más de 256 colores se podría convertir a un archivo PNG de 8 bits con una paleta de colores. De ese modo, se genera una imagen que tiene la misma calidad y que requiere menos memoria.
Por lo tanto, ten en cuenta que los objetos binarios de imagen de este directorio pueden cambiar durante la compilación. Si planeas leer una imagen como una secuencia de bits para convertirla en un mapa de bits, coloca tus imágenes en la carpeta res/raw/
; no se optimizarán en esta ubicación.
Archivo de mapa de bits
Un archivo de mapa de bits es un archivo PNG, WEBP, JPG o GIF. Android crea un recurso Drawable
para todos estos archivos cuando los guardas en el directorio res/drawable/
.
- ubicación del archivo:
res/drawable/filename.png
(.png
, .webp
, .jpg
o .gif
)
El nombre del archivo es el ID de recurso
- tipo de datos de recursos compilados:
- Puntero de recursos a un
BitmapDrawable
- referencia del recurso:
-
En Java:
R.drawable.filename
En XML: @[package:]drawable/filename
- ejemplo:
- Con una imagen guardada en
res/drawable/myimage.png
, este XML de diseño usa la imagen en una vista:
<ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/myimage" />
El siguiente código de la aplicación obtiene la imagen como un Drawable
:
Kotlin
val drawable: Drawable? = ResourcesCompat.getDrawable
(resources, R.drawable.myimage, null)
- consulta también:
-
Mapa de bits XML
Un mapa de bits XML es un recurso definido en XML que apunta a un archivo de mapa de bits. Como resultado, se obtiene un alias para un archivo de mapa de bits sin procesar. El XML puede especificar propiedades adicionales para el mapa de bits, como interpolación y representación en mosaicos.
Nota: Puedes usar un elemento <bitmap>
como campo secundario de un elemento <item>
. Por ejemplo, cuando creas una lista de estados o lista de capas, puedes excluir el atributo android:drawable
de un elemento <item>
y anidar dentro de este un <bitmap>
que defina el elemento de diseño.
- ubicación del archivo:
res/drawable/filename.xml
El nombre del archivo es el ID del recurso
- tipo de datos de recursos compilados:
- Puntero de recursos a un
BitmapDrawable
- referencia del recurso:
-
En Java:
R.drawable.filename
En XML: @[package:]drawable/filename
- sintaxis:
-
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@[package:]drawable/drawable_resource"
android:antialias=["true" | "false"]
android:dither=["true" | "false"]
android:filter=["true" | "false"]
android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"]
android:mipMap=["true" | "false"]
android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />
- elementos:
-
<bitmap>
- Obligatorio. Define la fuente y las propiedades del mapa de bits.
Atributos:
xmlns:android
- Cadena. Define el espacio de nombres XML, que debe ser
"http://schemas.android.com/apk/res/android"
. Esto solo es necesario si <bitmap>
es el elemento raíz. No lo es cuando <bitmap>
está anidado dentro de <item>
.
android:src
- Recurso de elementos de diseño. Obligatorio. Referencia a un recurso de elementos de diseño.
android:antialias
- Booleano. Habilita o inhabilita el suavizado de contornos.
android:dither
- Booleano. Habilita o inhabilita la interpolación del mapa de bits si este no tiene la misma configuración de píxeles que la pantalla, como un mapa de bits ARGB 8888 en una pantalla RGB 565.
android:filter
- Booleano. Habilita o inhabilita el filtrado del mapa de bits. El filtrado se usa cuando se encoge o estira el mapa de bits para mejorar la apariencia.
android:gravity
- Palabra clave. Define la gravedad del mapa de bits. La gravedad indica la ubicación en la que debe ir el elemento de diseño en su contenedor si el mapa de bits es más chico que el contenedor.
Debe ser uno o más de los siguientes valores constantes, separados por |
:
Valor | Descripción |
top |
Dispone el objeto en la parte superior del contenedor, sin cambiar el tamaño. |
bottom |
Dispone el objeto en la parte inferior del contenedor, sin cambiar el tamaño. |
left |
Dispone el objeto en el extremo izquierdo del contenedor, sin cambiar el tamaño. |
right |
Dispone el objeto en el extremo derecho del contenedor, sin cambiar el tamaño. |
center_vertical |
Dispone el objeto en el centro vertical del contenedor, sin cambiar el tamaño. |
fill_vertical |
Aumenta el tamaño vertical del objeto, si es necesario, para que cubra completamente al contenedor. |
center_horizontal |
Dispone el objeto en el centro horizontal del contenedor, sin cambiar el tamaño. |
fill_horizontal |
Aumenta el tamaño horizontal del objeto, si es necesario, para que cubra completamente al contenedor.
|
center |
Dispone el objeto en el centro del contenedor, tanto en el eje vertical como el horizontal (sin cambiar el tamaño). |
fill |
Aumenta el tamaño horizontal y vertical del objeto, si es necesario, para que cubra completamente el contenedor. Es el valor predeterminado. |
clip_vertical |
Opción adicional que se puede establecer para recortar el borde superior o inferior del campo secundario a los límites del contenedor. El recorte depende de la gravedad vertical: con un valor de gravedad "top" se recorta el borde inferior, con un valor "bottom" se recorta el borde superior y con un valor nulo se recortan ambos bordes.
|
clip_horizontal |
Opción adicional que se puede establecer para recortar el borde izquierdo o derecho del campo secundario a los límites del contenedor. El recorte depende de la gravedad horizontal: con un valor de gravedad "left" se recorta el borde derecho, con un valor "right" se recorta el borde izquierdo y con un valor nulo se recortan ambos bordes.
|
android:mipMap
- Booleano. Habilita o inhabilita la sugerencia de mipmap. Consulta
setHasMipMap()
para obtener más información.
El valor predeterminado es falso.
android:tileMode
- Palabra clave. Define el modo mosaico. Cuando se habilita el modo mosaico, se repite el mapa de bits. En este modo, se ignora la gravedad.
Debe ser uno de los siguientes valores constantes:
Valor | Descripción |
disabled |
El mapa de bits no aparece en el modo mosaico. Este es el valor predeterminado. |
clamp |
Replica el color del borde si el sombreador dibuja fuera de sus límites originales. |
repeat |
Repite la imagen del sombreador horizontal y verticalmente. |
mirror |
Repite la imagen del sombreador horizontal y verticalmente, y alterna imágenes duplicadas para que las imágenes adyacentes siempre encajen. |
- ejemplo:
-
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/icon"
android:tileMode="repeat" />
- consulta también:
-
Nine-patch
Un NinePatch
es una imagen PNG en la cual puedes definir regiones expandibles que Android ajusta cuando el contenido dentro de la vista supera los límites de la imagen normal. Por lo general, uno asigna este tipo de imagen como el fondo de una vista que tiene al menos una dimensión establecida en "wrap_content"
.
Cuando la vista se amplía para adaptarse al contenido, la imagen nine-patch también se ajusta para coincidir con el tamaño de la vista. Como ejemplo del uso de una imagen nine-patch, podemos mencionar el fondo que usa el widget Button
estándar de Android, que se debe estirar para que el texto (o la imagen) entre en el botón.
Como en los mapas de bits convencionales, puedes hacer referencia a un archivo nine-patch de forma directa o desde un recurso definido por XML.
Si deseas obtener toda la información para crear un archivo nine-patch con regiones expandibles, consulta Cómo crear mapas de bits de tamaño modificable (archivos 9-patch).
Archivo nine-patch
- ubicación del archivo:
res/drawable/filename.9.png
El nombre del archivo es el ID del recurso
- tipo de datos de recursos compilados:
- Puntero de recursos a un
NinePatchDrawable
- referencia del recurso:
-
En Java:
R.drawable.filename
En XML: @[package:]drawable/filename
- ejemplo:
- Con una imagen guardada en
res/drawable/myninepatch.9.png
, este XML de diseño usa el nine-patch en una vista:
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/myninepatch" />
- consulta también:
-
Nine-patch XML
Un nine-patch XML es un recurso definido en XML que apunta a un archivo nine-patch. El XML puede especificar la interpolación de una imagen.
- ubicación del archivo:
res/drawable/filename.xml
El nombre del archivo es el ID del recurso
- tipo de datos de recursos compilados:
- Puntero de recursos a un
NinePatchDrawable
- referencia del recurso:
-
En Java:
R.drawable.filename
En XML: @[package:]drawable/filename
- sintaxis:
-
<?xml version="1.0" encoding="utf-8"?>
<nine-patch
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@[package:]drawable/drawable_resource"
android:dither=["true" | "false"] />
- elementos:
-
<nine-patch>
- Obligatorio. Define la fuente y las propiedades de nine-patch.
Atributos:
xmlns:android
- Cadena. Obligatoria. Define el espacio de nombres XML, que debe ser
"http://schemas.android.com/apk/res/android"
.
android:src
- Recurso de elementos de diseño. Obligatorio. Referencia a un archivo nine-patch.
android:dither
- Booleano. Habilita o inhabilita la interpolación del mapa de bits si este no tiene la misma configuración de píxeles que la pantalla, como un mapa de bits ARGB 8888 en una pantalla RGB 565.
- ejemplo:
-
<?xml version="1.0" encoding="utf-8"?>
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/myninepatch"
android:dither="false" />
Lista de capas
Un LayerDrawable
es un objeto de diseño que gestiona un array de otros elementos de diseño. Cada elemento de diseño de la lista se dibuja en el orden de la lista. El último elemento de diseño de la lista se dibuja encima.
Un elemento <item>
representa a cada elemento de diseño dentro de un solo elemento <layer-list>
.
- ubicación del archivo:
res/drawable/filename.xml
El nombre del archivo es el ID del recurso
- tipo de datos de recursos compilados:
- Puntero de recursos a un
LayerDrawable
- referencia del recurso:
-
En Java:
R.drawable.filename
En XML: @[package:]drawable/filename
- sintaxis:
-
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@[package:]drawable/drawable_resource"
android:id="@[+][package:]id/resource_name"
android:top="dimension"
android:right="dimension"
android:bottom="dimension"
android:left="dimension" />
</layer-list>
- elementos:
-
<layer-list>
- Obligatorio. Debe ser el elemento raíz. Contiene uno o más elementos
<item>
.
Atributos:
xmlns:android
- Cadena. Obligatoria. Define el espacio de nombres XML, que debe ser
"http://schemas.android.com/apk/res/android"
.
<item>
- Define un elemento de diseño que se dispondrá en el elemento de diseño de capa, en una posición definida por los atributos.
Tiene que ser un elemento secundario de un elemento
<layer-list>
. Acepta elementos <bitmap>
secundarios.
Atributos:
android:drawable
- Recurso de elementos de diseño. Obligatorio. Referencia a un recurso de elementos de diseño.
android:id
- ID de recurso. Un ID de recurso único para este elemento de diseño. Si quieres crear un nuevo ID de recurso para este elemento, utiliza la forma:
"@+id/name"
. El símbolo + indica que se creó como un ID nuevo. Puedes usar este identificador para obtener y modificar el elemento de diseño con View.findViewById()
o Activity.findViewById()
.
android:top
- Dimensión. Desplazamiento superior, como valor de dimensión o recurso de dimensión.
android:right
- Dimensión. Desplazamiento del lado derecho, como valor de dimensión o recurso de dimensión.
android:bottom
- Dimensión. El desplazamiento inferior, como valor de dimensión o recurso de dimensión.
android:left
- Dimensión. Es el desplazamiento del lado izquierdo, como valor de dimensión o recurso de dimensión.
De forma predeterminada, todos los elementos de diseño se escalan para adaptarse al tamaño de la vista contenedora. Por lo tanto, si dispones tus imágenes en una lista de capas en distintas posiciones, es posible que aumente el tamaño de la vista y que algunas imágenes se adecuen según sea necesario.
Para evitar que los elementos se escalen en la lista, usa un elemento <bitmap>
dentro del elemento <item>
para especificar el elemento de diseño y definir la gravedad en un componente no escalable, como "center"
. Por ejemplo, el siguiente <item>
define un elemento que se escala para adaptarse a la vista que lo contiene:
<item android:drawable="@drawable/image" />
Para evitar el ajuste de escala, en el siguiente ejemplo se usa un elemento <bitmap>
con gravedad centrada:
<item>
<bitmap android:src="@drawable/image"
android:gravity="center" />
</item>
- ejemplo:
- Archivo en formato XML guardado en
res/drawable/layers.xml
:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:src="@drawable/android_red"
android:gravity="center" />
</item>
<item android:top="10dp" android:left="10dp">
<bitmap android:src="@drawable/android_green"
android:gravity="center" />
</item>
<item android:top="20dp" android:left="20dp">
<bitmap android:src="@drawable/android_blue"
android:gravity="center" />
</item>
</layer-list>
En este ejemplo, se usa un elemento <bitmap>
anidado para definir el recurso del elemento de diseño correspondiente a cada elemento con un valor de gravedad "center"
. Esto garantiza que ninguna de las imágenes se escale para adaptarse al tamaño del contenedor debido al cambio de tamaño ocasionado por las imágenes desplazadas.
Este XML de diseño aplica el elemento de diseño a una vista:
<ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/layers" />
Como resultado, se obtiene una pila de imágenes con desplazamiento cada vez mayor:
- consulta también:
-
Lista de estados
Un StateListDrawable
es un objeto de diseño definido en XML que usa varias imágenes para representar el mismo gráfico, según el estado del objeto. Por ejemplo, el estado de un widget Button
se puede presionar o enfocar, o puede no realizarse ninguna de esas acciones. Con un elemento de diseño de lista de estados, puedes proporcionar una imagen de fondo diferente para cada estado.
Puedes describir la lista de estados en un archivo en formato XML. Cada gráfico se representa a través de un elemento <item>
dentro de un solo elemento <selector>
. Cada <item>
usa varios atributos para describir el estado en que se usa como gráfico del elemento de diseño.
Durante cada cambio de estado, se recorre de arriba abajo la lista de estados, y se utiliza el primer elemento que coincida con el estado actual. La selección no depende de la "mejor coincidencia", sino del primer elemento que cumple con los criterios mínimos del estado.
- ubicación del archivo:
res/drawable/filename.xml
El nombre del archivo es el ID del recurso
- tipo de datos de recursos compilados:
- Puntero de recursos a un
StateListDrawable
- referencia del recurso:
-
En Java:
R.drawable.filename
En XML: @[package:]drawable/filename
- sintaxis:
-
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:constantSize=["true" | "false"]
android:dither=["true" | "false"]
android:variablePadding=["true" | "false"] >
<item
android:drawable="@[package:]drawable/drawable_resource"
android:state_pressed=["true" | "false"]
android:state_focused=["true" | "false"]
android:state_hovered=["true" | "false"]
android:state_selected=["true" | "false"]
android:state_checkable=["true" | "false"]
android:state_checked=["true" | "false"]
android:state_enabled=["true" | "false"]
android:state_activated=["true" | "false"]
android:state_window_focused=["true" | "false"] />
</selector>
- elementos:
-
<selector>
- Obligatorio. Debe ser el elemento raíz. Contiene uno o más elementos
<item>
.
Atributos:
xmlns:android
- Cadena. Obligatoria. Define el espacio de nombres XML, que debe ser
"http://schemas.android.com/apk/res/android"
.
android:constantSize
- Booleano. Es verdadero si el tamaño interno informado del elemento de diseño permanece constante durante los cambios de estado (el tamaño es el valor máximo de todos los estados). Es falso si el tamaño varía según el estado actual. El valor predeterminado es falso.
android:dither
- Booleano. Es verdadero para habilitar la interpolación del mapa de bits si este no tiene la misma configuración de píxeles que la pantalla (por ejemplo, un mapa de bits ARGB 8888 en una pantalla RGB 565). Es falso para inhabilitar la interpolación. El valor predeterminado es verdadero.
android:variablePadding
- Booleano. Es verdadero si el padding del elemento de diseño cambia según el estado seleccionado. Es falso si el padding debe permanecer igual, según el padding máximo de todos los estados. Si habilitas esta funcionalidad, deberás realizar tareas de diseño cuando cambie el estado (a menudo, esto no es posible). El valor predeterminado es falso.
<item>
- Define un elemento de diseño que se usará en ciertos estados, según sus atributos. Tiene que ser un elemento secundario de un elemento
<selector>
.
Atributos:
android:drawable
- Recurso de elementos de diseño. Obligatorio. Referencia a un recurso de elementos de diseño.
android:state_pressed
- Booleano. Es verdadero si se usa este elemento cuando el objeto está presionado, como cuando se toca un botón. Es falso si se usa este elemento en el estado predeterminado, sin presionar.
android:state_focused
- Booleano. Es verdadero si se usa este elemento cuando el objeto tiene foco de entrada, como cuando el usuario selecciona una entrada de texto. Es falso si se usa este elemento en el estado predeterminado, no enfocado.
android:state_hovered
- Booleano. Es verdadero si se usa este elemento cuando se coloca el cursor sobre el objeto. Es falso si se usa este elemento en el estado predeterminado, cuando el cursor no se coloca sobre el objeto. A menudo, este elemento de diseño será el mismo que el del estado "enfocado".
Se introdujo en el nivel de API 14.
android:state_selected
- Booleano. Es verdadero si se usa este elemento cuando el objeto es la selección actual del usuario cuando se navega con un control de dirección, como cuando se navega por una lista con un pad direccional. Es falso si se usa este elemento cuando el objeto no está seleccionado.
El estado seleccionado se usa cuando android:state_focused
no es suficiente, por ejemplo, cuando la vista de lista está enfocada y se selecciona un elemento de ella con un pad direccional.
android:state_checkable
- Booleano. Es verdadero si se usa este elemento cuando se puede seleccionar el objeto. Es falso si se usa este elemento cuando no se puede seleccionar el objeto. Solo es útil si el objeto puede hacer la transición entre un widget que se puede seleccionar y uno que no.
android:state_checked
- Booleano. Es verdadero si se usa este elemento cuando el objeto está seleccionado. Es falso si se usa cuando el objeto no está seleccionado.
android:state_enabled
- Booleano. Es verdadero si se usa este elemento cuando el objeto está habilitado, es decir, cuando es capaz de recibir eventos táctiles o de clics. Es falso si se usa cuando el objeto está inhabilitado.
android:state_activated
- Booleano. Es verdadero si se usa este elemento cuando el objeto está activado como la selección persistente, por ejemplo, para "destacar" el elemento de lista previamente seleccionado en una vista de navegación persistente. Es falso si se usa cuando el objeto no está activado.
Se introdujo en el nivel de API 11.
android:state_window_focused
- Booleano. Es verdadero si se usa este elemento cuando la ventana de la aplicación está enfocada, lo que significa que la aplicación está en primer plano. Es falso si se usa este elemento cuando la ventana de la aplicación no está enfocada, por ejemplo, si se abre el panel de notificaciones o aparece un diálogo.
Nota: Android aplica el primer elemento de la lista de estados que coincida con el estado actual del objeto. Así, si el primer elemento de la lista no contiene ninguno de los atributos de estado anteriores, se aplicará cada vez. Por eso, el valor predeterminado siempre debe ser el último, como se muestra en el siguiente ejemplo.
- ejemplo:
- Archivo en formato XML guardado en
res/drawable/button.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/button_pressed" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/button_focused" /> <!-- focused -->
<item android:state_hovered="true"
android:drawable="@drawable/button_focused" /> <!-- hovered -->
<item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>
Este XML de diseño aplica el elemento de diseño de lista de estados a un botón:
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/button" />
- consulta también:
-
Lista de niveles
Es un elemento de diseño capaz de administrar varios elementos de diseño alternativos (cada uno con un valor numérico máximo). Si se fija el valor del nivel de un elemento de diseño con setLevel()
, se cargará el recurso de elementos de diseño en la lista de niveles cuyo valor android:maxLevel
sea superior o igual al valor pasado al método.
- ubicación del archivo:
res/drawable/filename.xml
El nombre del archivo es el ID del recurso
- tipo de datos de recursos compilados:
- Puntero de recursos a un
LevelListDrawable
- referencia del recurso:
-
En Java:
R.drawable.filename
En XML: @[package:]drawable/filename
- sintaxis:
-
<?xml version="1.0" encoding="utf-8"?>
<level-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/drawable_resource"
android:maxLevel="integer"
android:minLevel="integer" />
</level-list>
- elementos:
-
<level-list>
- Obligatorio. Debe ser el elemento raíz. Contiene uno o más elementos
<item>
.
Atributos:
xmlns:android
- Cadena. Obligatoria. Define el espacio de nombres XML, que debe ser
"http://schemas.android.com/apk/res/android"
.
<item>
- Define un elemento de diseño que se usará a cierto nivel.
Atributos:
android:drawable
- Recurso de elementos de diseño. Obligatorio. Referencia a un recurso de elementos de diseño que se insertará.
android:maxLevel
- Entero. Es el nivel máximo permitido para este elemento.
android:minLevel
- Entero. Es el nivel mínimo permitido para este elemento.
- ejemplo:
-
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/status_off"
android:maxLevel="0" />
<item
android:drawable="@drawable/status_on"
android:maxLevel="1" />
</level-list>
Una vez aplicado en una View
, el nivel se puede cambiar con setLevel()
o setImageLevel()
.
- consulta también:
-
Elemento de diseño de transición
Un TransitionDrawable
es un objeto de diseño capaz de fundirse entre otros dos recursos de elementos de diseño.
Un elemento <item>
representa a cada elemento de diseño dentro de un solo elemento <transition>
. No se admiten más de dos elementos. Para realizar una transición hacia adelante, llama a startTransition()
. Para realizar una transición hacia atrás, llama a reverseTransition()
.
- ubicación del archivo:
res/drawable/filename.xml
El nombre del archivo es el ID del recurso
- tipo de datos de recursos compilados:
- Puntero de recursos a un
TransitionDrawable
- referencia del recurso:
-
En Java:
R.drawable.filename
En XML: @[package:]drawable/filename
- sintaxis:
-
<?xml version="1.0" encoding="utf-8"?>
<transition
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@[package:]drawable/drawable_resource"
android:id="@[+][package:]id/resource_name"
android:top="dimension"
android:right="dimension"
android:bottom="dimension"
android:left="dimension" />
</transition>
- elementos:
-
<transition>
- Obligatorio. Debe ser el elemento raíz. Contiene uno o más elementos
<item>
.
Atributos:
xmlns:android
- Cadena. Obligatoria. Define el espacio de nombres XML, que debe ser
"http://schemas.android.com/apk/res/android"
.
<item>
- Define un elemento de diseño que se usará como parte de la transición del elemento de diseño.
Tiene que ser un elemento secundario de un elemento
<transition>
. Acepta elementos <bitmap>
secundarios.
Atributos:
android:drawable
- Recurso de elementos de diseño. Obligatorio. Referencia a un recurso de elementos de diseño.
android:id
- ID de recurso. Un ID de recurso único para este elemento de diseño. Si quieres crear un nuevo ID de recurso para este elemento, utiliza la forma:
"@+id/name"
. El símbolo + indica que se creó como un ID nuevo. Puedes usar este identificador para obtener y modificar el elemento de diseño con View.findViewById()
o Activity.findViewById()
.
android:top
- Entero. Desplazamiento superior en píxeles.
android:right
- Entero. Desplazamiento del lado derecho en píxeles.
android:bottom
- Entero. Desplazamiento inferior en píxeles.
android:left
- Entero. Desplazamiento del lado izquierdo en píxeles.
- ejemplo:
- Archivo en formato XML guardado en
res/drawable/transition.xml
:
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/on" />
<item android:drawable="@drawable/off" />
</transition>
Este XML de diseño aplica el elemento de diseño a una vista:
<ImageButton
android:id="@+id/button"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/transition" />
Y el siguiente código realiza una transición de 500 ms del primer elemento al segundo:
Kotlin
val button: ImageButton = findViewById(R.id.button)
val drawable: Drawable = button.drawable
if (drawable is TransitionDrawable) {
drawable.startTransition(500)
}
Java
ImageButton button = (ImageButton) findViewById(R.id.button);
Drawable drawable = button.getDrawable();
if (drawable instanceof TransitionDrawable) {
((TransitionDrawable) drawable).startTransition(500);
}
- consulta también:
-
Elemento de diseño de inserción
Elemento de diseño definido en XML que inserta otro elemento de diseño en una distancia específica. Resulta útil cuando una vista requiere un fondo de dimensiones inferiores a los límites reales de ella.
- ubicación del archivo:
res/drawable/filename.xml
El nombre del archivo es el ID del recurso
- tipo de datos de recursos compilados:
- Puntero de recursos a un
InsetDrawable
- referencia del recurso:
-
En Java:
R.drawable.filename
En XML: @[package:]drawable/filename
- sintaxis:
-
<?xml version="1.0" encoding="utf-8"?>
<inset
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/drawable_resource"
android:insetTop="dimension"
android:insetRight="dimension"
android:insetBottom="dimension"
android:insetLeft="dimension" />
- elementos:
-
<inset>
- Obligatorio. Define el elemento de diseño de inserción. Debe ser el elemento raíz.
Atributos:
xmlns:android
- Cadena. Obligatoria. Define el espacio de nombres XML, que debe ser
"http://schemas.android.com/apk/res/android"
.
android:drawable
- Recurso de elementos de diseño. Obligatorio. Referencia a un recurso de elementos de diseño que se insertará.
android:insetTop
- Dimensión. Es la inserción superior, como valor de dimensión o recurso de dimensión.
android:insetRight
- Dimensión. Es la inserción del lado derecho, como valor de dimensión o recurso de dimensión.
android:insetBottom
- Dimensión. Es la inserción inferior, como valor de dimensión o recurso de dimensión.
android:insetLeft
- Dimensión. Es la inserción del lado izquierdo, como valor de dimensión o recurso de dimensión.
- ejemplo:
-
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/background"
android:insetTop="10dp"
android:insetLeft="10dp" />
- consulta también:
-
Elemento de diseño de recorte
Es un elemento de diseño definido en XML que recorta otro elemento de diseño según el nivel actual de este elemento de diseño. Puedes controlar el nivel de recorte del elemento de diseño secundario a lo ancho y alto según el nivel, y también un valor de gravedad para controlar la ubicación en el contenedor. Por lo general, se usa para implementar componentes como barras de progreso.
- ubicación del archivo:
res/drawable/filename.xml
El nombre del archivo es el ID del recurso
- tipo de datos de recursos compilados:
- Puntero de recursos a un
ClipDrawable
- referencia del recurso:
-
En Java:
R.drawable.filename
En XML: @[package:]drawable/filename
- sintaxis:
-
<?xml version="1.0" encoding="utf-8"?>
<clip
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/drawable_resource"
android:clipOrientation=["horizontal" | "vertical"]
android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"] />
- elementos:
-
<clip>
- Obligatorio. Define el elemento de diseño de recorte. Debe ser el elemento raíz.
Atributos:
xmlns:android
- Cadena. Obligatoria. Define el espacio de nombres XML, que debe ser
"http://schemas.android.com/apk/res/android"
.
android:drawable
- Recurso de elementos de diseño. Obligatorio. Referencia a un recurso de elementos de diseño que se recortará.
android:clipOrientation
- Palabra clave. La orientación del recorte.
Debe ser uno de los siguientes valores constantes:
Valor | Descripción |
horizontal |
Recorta el elemento de diseño horizontalmente. |
vertical |
Recorta el elemento de diseño verticalmente. |
android:gravity
- Palabra clave. Especifica el lugar de recorte dentro del elemento de diseño.
Debe ser uno o más de los siguientes valores constantes, separados por |
:
Valor | Descripción |
top |
Dispone el objeto en la parte superior del contenedor, sin cambiar el tamaño. Cuando clipOrientation es "vertical" , el recorte se realiza en la parte inferior del elemento de diseño. |
bottom |
Dispone el objeto en la parte inferior del contenedor, sin cambiar el tamaño. Cuando clipOrientation es "vertical" , el recorte se realiza en la parte superior del elemento de diseño. |
left |
Dispone el objeto en el extremo izquierdo del contenedor, sin cambiar el tamaño. Es el valor predeterminado. Cuando clipOrientation es "horizontal" , el recorte se realiza en el lateral derecho del elemento de diseño. |
right |
Dispone el objeto en el extremo derecho del contenedor, sin cambiar el tamaño. Cuando clipOrientation es "horizontal" , el recorte se realiza en el lateral izquierdo del elemento de diseño. |
center_vertical |
Dispone el objeto en el centro vertical del contenedor, sin cambiar el tamaño. El recorte funciona como el valor de gravedad "center" . |
fill_vertical |
Aumenta el tamaño vertical del objeto, si es necesario, para que cubra completamente al contenedor. Cuando clipOrientation es "vertical" , no hay recorte porque el elemento de diseño cubre el espacio vertical (a menos que el nivel del elemento de diseño sea 0 y, por ello, este no sea visible). |
center_horizontal |
Dispone el objeto en el centro horizontal del contenedor, sin cambiar el tamaño.
El recorte funciona como el valor de gravedad "center" . |
fill_horizontal |
Aumenta el tamaño horizontal del objeto, si es necesario, para que cubra completamente al contenedor. Cuando clipOrientation es "horizontal" , no hay recorte porque el elemento de diseño cubre el espacio horizontal (a menos que el nivel del elemento de diseño sea 0 y, por ello, este no sea visible).
|
center |
Dispone el objeto en el centro del contenedor, tanto en el eje vertical como el horizontal (sin cambiar el tamaño). Cuando clipOrientation es "horizontal" , el recorte se aplica a la izquierda y a la derecha. Cuando clipOrientation sea "vertical" , el recorte se aplicará en la parte superior e inferior. |
fill |
Aumenta el tamaño horizontal y vertical del objeto, si es necesario, para que cubra completamente el contenedor. No habrá recorte porque el elemento de diseño cubre el espacio horizontal y vertical (a menos que el nivel del elemento de diseño sea 0 y, por ello, no visible). |
clip_vertical |
Opción adicional que se puede establecer para recortar el borde superior o inferior del campo secundario a los límites del contenedor. El recorte depende de la gravedad vertical: con un valor de gravedad "top" se recorta el borde inferior, con un valor "bottom" se recorta el borde superior y con un valor nulo se recortan ambos bordes.
|
clip_horizontal |
Opción adicional que se puede establecer para recortar el borde izquierdo o derecho del campo secundario a los límites del contenedor. El recorte depende de la gravedad horizontal: con un valor de gravedad "left" se recorta el borde derecho, con un valor "right" se recorta el borde izquierdo y con un valor nulo se recortan ambos bordes.
|
- ejemplo:
- Archivo en formato XML guardado en
res/drawable/clip.xml
:
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/android"
android:clipOrientation="horizontal"
android:gravity="left" />
El siguiente XML de diseño aplica el elemento de diseño de recorte a una vista:
<ImageView
android:id="@+id/image"
android:src="@drawable/clip"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
El siguiente código obtiene el elemento de diseño y aumenta el recorte para mostrar la imagen de manera progresiva:
Kotlin
val imageview: ImageView = findViewById(R.id.image)
val drawable: Drawable = imageview.background
if (drawable is ClipDrawable) {
drawable.level = drawable.level + 1000
}
Java
ImageView imageview = (ImageView) findViewById(R.id.image);
Drawable drawable = imageview.getBackground();
if (drawable instanceof ClipDrawable) {
((ClipDrawable)drawable).setLevel(drawable.getLevel() + 1000);
}
Si se aumenta el nivel, disminuye la cantidad de recorte y la imagen se muestra poco a poco. Aquí se muestra a un nivel de 7,000:
Nota: El nivel predeterminado es 0; la imagen está completamente recortada y no es visible. Cuando el nivel es 10,000, la imagen no se recorta y es completamente visible.
- consulta también:
-
Elemento de diseño de escala
Un elemento de diseño definido en XML que cambia el tamaño de otro elemento de diseño según el nivel actual.
- ubicación del archivo:
res/drawable/filename.xml
El nombre del archivo es el ID del recurso
- tipo de datos de recursos compilados:
- Puntero de recursos a un
ScaleDrawable
- referencia del recurso:
-
En Java:
R.drawable.filename
En XML: @[package:]drawable/filename
- sintaxis:
-
<?xml version="1.0" encoding="utf-8"?>
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/drawable_resource"
android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"]
android:scaleHeight="percentage"
android:scaleWidth="percentage" />
- elementos:
-
<scale>
- Obligatorio. Define el elemento de diseño de escala. Debe ser el elemento raíz.
Atributos:
xmlns:android
- Cadena. Obligatoria. Define el espacio de nombres XML, que debe ser
"http://schemas.android.com/apk/res/android"
.
android:drawable
- Recurso de elementos de diseño. Obligatorio. Referencia a un recurso de elementos de diseño.
android:scaleGravity
- Palabra clave. Especifica la posición de gravedad después del ajuste de escala.
Debe ser uno o más de los siguientes valores constantes, separados por |
:
Valor | Descripción |
top |
Dispone el objeto en la parte superior del contenedor, sin cambiar el tamaño. |
bottom |
Dispone el objeto en la parte inferior del contenedor, sin cambiar el tamaño. |
left |
Dispone el objeto en el extremo izquierdo del contenedor, sin cambiar el tamaño. Es el valor predeterminado. |
right |
Dispone el objeto en el extremo derecho del contenedor, sin cambiar el tamaño. |
center_vertical |
Dispone el objeto en el centro vertical del contenedor, sin cambiar el tamaño. |
fill_vertical |
Aumenta el tamaño vertical del objeto, si es necesario, para que cubra completamente al contenedor. |
center_horizontal |
Dispone el objeto en el centro horizontal del contenedor, sin cambiar el tamaño. |
fill_horizontal |
Aumenta el tamaño horizontal del objeto, si es necesario, para que cubra completamente al contenedor.
|
center |
Dispone el objeto en el centro del contenedor, tanto en el eje vertical como el horizontal (sin cambiar el tamaño). |
fill |
Aumenta el tamaño horizontal y vertical del objeto, si es necesario, para que cubra completamente el contenedor. |
clip_vertical |
Opción adicional que se puede establecer para recortar el borde superior o inferior del campo secundario a los límites del contenedor. El recorte depende de la gravedad vertical: con un valor de gravedad "top" se recorta el borde inferior, con un valor "bottom" se recorta el borde superior y con un valor nulo se recortan ambos bordes.
|
clip_horizontal |
Opción adicional que se puede establecer para recortar el borde izquierdo o derecho del campo secundario a los límites del contenedor. El recorte depende de la gravedad horizontal: con un valor de gravedad "left" se recorta el borde derecho, con un valor "right" se recorta el borde izquierdo y con un valor nulo se recortan ambos bordes.
|
android:scaleHeight
- Porcentaje. Es la altura de la escala, expresada como porcentaje del límite del elemento de diseño. El formato del valor es XX%, como 100% o 12.5%.
android:scaleWidth
- Porcentaje. Es el ancho de la escala, expresada como porcentaje del límite del elemento de diseño. El formato del valor es XX%, como 100% o 12.5%.
- ejemplo:
-
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/logo"
android:scaleGravity="center_vertical|center_horizontal"
android:scaleHeight="80%"
android:scaleWidth="80%" />
- consulta también:
-
Elemento de diseño de forma
Se trata de una forma genérica definida en XML.
- ubicación del archivo:
res/drawable/filename.xml
El nombre del archivo es el ID del recurso
- tipo de datos de recursos compilados:
- Puntero de recursos a un
GradientDrawable
- referencia del recurso:
-
En Java:
R.drawable.filename
En XML: @[package:]drawable/filename
- sintaxis:
-
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape=["rectangle" | "oval" | "line" | "ring"] >
<corners
android:radius="integer"
android:topLeftRadius="integer"
android:topRightRadius="integer"
android:bottomLeftRadius="integer"
android:bottomRightRadius="integer" />
<gradient
android:angle="integer"
android:centerX="float"
android:centerY="float"
android:centerColor="integer"
android:endColor="color"
android:gradientRadius="integer"
android:startColor="color"
android:type=["linear" | "radial" | "sweep"]
android:useLevel=["true" | "false"] />
<padding
android:left="integer"
android:top="integer"
android:right="integer"
android:bottom="integer" />
<size
android:width="integer"
android:height="integer" />
<solid
android:color="color" />
<stroke
android:width="integer"
android:color="color"
android:dashWidth="integer"
android:dashGap="integer" />
</shape>
- elementos:
-
<shape>
- Obligatorio. Es el elemento de diseño de forma. Debe ser el elemento raíz.
Atributos:
xmlns:android
- Cadena. Obligatoria. Define el espacio de nombres XML, que debe ser
"http://schemas.android.com/apk/res/android"
.
android:shape
- Palabra clave. Define el tipo de forma. A continuación, se indican los valores válidos:
Valor | Descripción |
"rectangle" |
Es un rectángulo que cubre la vista contenedora. Es la forma predeterminada. |
"oval" |
Es una forma ovalada que cubre las dimensiones de la vista contenedora. |
"line" |
Es una línea horizontal que se extiende a lo ancho de la vista contenedora. Esta forma requiere el elemento <stroke> para definir el espesor de la línea. |
"ring" |
Forma de anillo. |
Los siguientes atributos solo se usan cuando android:shape="ring"
:
android:innerRadius
- Dimensión. Radio de la parte interna del anillo (el orificio del centro), como valor de dimensión o recurso de dimensión.
android:innerRadiusRatio
- Flotante. Radio de la parte interna del anillo, expresado como proporción del ancho del anillo. Por ejemplo, si
android:innerRadiusRatio="5"
, el radio interno es igual al ancho del anillo dividido por 5. android:innerRadius
anula este valor. El valor predeterminado es 9.
android:thickness
- Dimensión. Espesor del anillo, como valor de dimensión o recurso de dimensión.
android:thicknessRatio
- Número de punto flotante. Es el espesor del anillo, expresado como proporción del ancho del anillo. Por ejemplo, si
android:thicknessRatio="2"
, el espesor es igual al ancho del anillo dividido por 2. android:innerRadius
anula este valor. El valor predeterminado es 3.
android:useLevel
- Booleano. Es verdadero si se usa como un
LevelListDrawable
. Por lo general, es falso. De lo contrario, es posible que la forma no aparezca.
<corners>
- Genera esquinas redondeadas en la forma. Solo servirá si la forma es un rectángulo.
Atributos:
android:radius
- Dimensión. Radio de todas las esquinas, como valor de dimensión o recurso de dimensión. Los atributos siguientes lo anulan en cada esquina.
android:topLeftRadius
- Dimensión. Radio de la esquina superior izquierda, como valor de dimensión o recurso de dimensión.
android:topRightRadius
- Dimensión. Radio de la esquina superior derecha, como valor de dimensión o recurso de dimensión.
android:bottomLeftRadius
- Dimensión. Radio de la esquina inferior izquierda, como valor de dimensión o recurso de dimensión.
android:bottomRightRadius
- Dimensión. Es el radio de la esquina inferior derecha, como valor de dimensión o recurso de dimensión.
Nota: En cada esquina, se debe proporcionar (inicialmente) un radio de esquina superior a 1. De lo contrario, las esquinas no se redondearán. Si deseas que no se redondeen determinadas esquinas, es posible usar android:radius
como alternativa para fijar un radio de esquina predeterminado superior a 1. A continuación, debes anular cada esquina con los valores deseados y fijar en 0 ("0 dp") las esquinas redondeadas.
<gradient>
- Especifica un color de gradiente para la forma.
Atributos:
android:angle
- Entero. El ángulo del gradiente (en grados). De izquierda a derecha, 0. De abajo hacia arriba, 90. Debe ser un múltiplo de 45. El valor predeterminado es 0.
android:centerX
- Número de punto flotante. Posición X relativa para el centro del gradiente ("0-1.0").
android:centerY
- Flotante. Posición Y relativa del centro del gradiente ("0-1.0").
android:centerColor
- Color. Color opcional entre el color inicial y final, como valor hexadecimal o recurso de color.
android:endColor
- Color. Color final, como valor hexadecimal o recurso de color.
android:gradientRadius
- Flotante. Radio del gradiente. Solo sirve cuando
android:type="radial"
.
android:startColor
- Color. Color inicial, como valor hexadecimal o recurso de color.
android:type
- Palabra clave. Tipo de patrón del gradiente que se aplicará. A continuación, se indican los valores válidos:
Valor | Descripción |
"linear" |
Gradiente lineal. Es el valor predeterminado. |
"radial" |
Gradiente radial. El color inicial es el color del centro. |
"sweep" |
Gradiente con línea de barrido. |
android:useLevel
- Booleano. Es verdadero si se usa como un
LevelListDrawable
.
<padding>
- Es el padding que se aplicará al elemento de la vista contenedora (se rellena la posición, no la forma, del contenido de la vista).
Atributos:
android:left
- Dimensión. Relleno izquierdo, como valor de dimensión o recurso de dimensión.
android:top
- Dimensión. Relleno superior, como valor de dimensión o recurso de dimensión.
android:right
- Dimensión. Relleno derecho, como valor de dimensión o recurso de dimensión.
android:bottom
- Dimensión. Relleno inferior, como valor de dimensión o recurso de dimensión.
<size>
- Es el tamaño de la forma.
Atributos:
android:height
- Dimensión. Altura de la forma, como valor de dimensión o recurso de dimensión.
android:width
- Dimensión. Es el ancho de la forma, como valor de dimensión o recurso de dimensión.
Nota: Según la configuración predeterminada, la forma se ajusta al tamaño de la vista contenedora en proporción a las dimensiones definidas aquí. Cuando usas la forma en una ImageView
, puedes restringir el ajuste de escala fijando android:scaleType
en "center"
.
<solid>
- Es un color sólido para cubrir la forma.
Atributos:
android:color
- Color. Color que se aplicará a la forma, como valor hexadecimal o recurso de color.
<stroke>
- Es la línea de trazo para la forma.
Atributos:
android:width
- Dimensión. Espesor de la línea, como valor de dimensión o recurso de dimensión.
android:color
- Color. Color de la línea, como valor hexadecimal o recurso de color.
android:dashGap
- Dimensión. Distancia entre los puntos de una línea, como valor de dimensión o recurso de dimensión. Solo servirá si se fija
android:dashWidth
.
android:dashWidth
- Dimensión. Tamaño de cada línea de puntos, como valor de dimensión o recurso de dimensión. Solo servirá si se fija
android:dashGap
.
- ejemplo:
- Archivo en formato XML guardado en
res/drawable/gradient_box.xml
:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#FFFF0000"
android:endColor="#80FF00FF"
android:angle="45"/>
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp" />
<corners android:radius="8dp" />
</shape>
Este XML de diseño aplica el elemento de diseño de forma a una vista:
<TextView
android:background="@drawable/gradient_box"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
En este código de la aplicación, se obtiene el elemento de diseño de forma y se usa en una vista.
Kotlin
val shape: Drawable? = getDrawable
(resources
, R.drawable.gradient_box, getTheme()
)
val tv: TextView = findViewById(R.id.textview)
tv.background = shape
Java
Resources res = getResources()
;
Drawable shape = ResourcesCompat.getDrawable
(res, R.drawable.gradient_box, getTheme()
);
TextView tv = (TextView)findViewById(R.id.textview);
tv.setBackground(shape);
- consulta también:
-