A drawable resource is a general concept for a graphic that can be drawn to the screen and that
you can retrieve with APIs such as getDrawable(int) or apply
to another XML resource with attributes such as android:drawable and android:icon.
There are several types of drawables:
- Bitmap file
- A bitmap graphic file (PNG, WEBP, JPG, or GIF).
Creates a
BitmapDrawable. - Nine-patch file
- A PNG file with stretchable regions to let images resize based on content (
.9.png). Creates aNinePatchDrawable. - Layer list
- A drawable that manages an array of other drawables. These are drawn in array order, so the
element with the largest index is drawn on top. Creates a
LayerDrawable. - State list
- An XML file that references different bitmap graphics
for different states—for example, to use a different image when a button is tapped.
Creates a
StateListDrawable. - Level list
- An XML file that defines a drawable that manages a number of alternate drawables, each
assigned a maximum numerical value. Creates a
LevelListDrawable. - Transition drawable
- An XML file that defines a drawable that can cross-fade between two drawable resources.
Creates a
TransitionDrawable. - Inset drawable
- An XML file that defines a drawable that insets another drawable by a specified distance. This is useful when a view needs a background drawable that is smaller than the view's actual bounds.
- Clip drawable
- An XML file that defines a drawable that clips another drawable based on this drawable's
current level value. Creates a
ClipDrawable. - Scale drawable
- An XML file that defines a drawable that changes the size of another drawable based on its
current level value. Creates a
ScaleDrawable - Shape drawable.
- An XML file that defines a geometric shape, including colors and gradients.
Creates a
GradientDrawable.
For information about how to
create an AnimationDrawable,
see the Animation resources document.
Note: A color resource can also be
used as a drawable in XML. For example, when creating a state list
drawable, you can reference a color resource for the android:drawable attribute (android:drawable="@color/green").
Bitmap
A bitmap image. Android supports bitmap files in the following formats: PNG (preferred), WEBP (preferred, requires API level 17 or higher), JPG (acceptable), GIF (discouraged).
You can reference a bitmap file directly, using the filename as the resource ID, or create an alias resource ID in XML.
Note: Bitmap files might be automatically optimized with lossless
image compression by the aapt tool during the build process. For
example, a true-color PNG that doesn't require more than 256 colors might be converted to an 8-bit
PNG with a color palette. This results in an image of equal quality that requires less
memory.
So, be aware that the image binaries placed in this directory can change during the build. If
you plan to read an image as a bit stream to convert it to a bitmap, put your images in
the res/raw/ folder instead, where they aren't optimized.
Bitmap file
A bitmap file is a PNG, WEBP, JPG, or GIF file. Android creates a Drawable
resource for any of these files when you save them in the res/drawable/ directory.
- file location:
res/drawable/filename.png(.png,.webp,.jpg, or.gif)
The filename is the resource ID- compiled resource datatype:
- Resource pointer to a
BitmapDrawable - resource reference:
-
In Java:
R.drawable.filename
In XML:@[package:]drawable/filename - example:
- With an image saved at
res/drawable/myimage.png, this layout XML applies the image to a view:<ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/myimage" />
The following application code retrieves the image as a
Drawable:Kotlin
val drawable: Drawable? = ResourcesCompat.
getDrawable(resources, R.drawable.myimage, null)Java
Resources res =
getResources(); Drawable drawable = ResourcesCompat.getDrawable(res, R.drawable.myimage, null); - see also:
XML bitmap
An XML bitmap is a resource defined in XML that points to a bitmap file. The effect is an alias for a raw bitmap file. The XML can specify additional properties for the bitmap, such as dithering and tiling.
Note: You can use a <bitmap> element as a child of
an <item> element. For
example, when creating a state list or layer list,
you can exclude the android:drawable
attribute from an <item> element and nest a <bitmap> inside it
that defines the drawable item.
- file location:
res/drawable/filename.xml
The filename is the resource ID- compiled resource datatype:
- Resource pointer to a
BitmapDrawable - resource reference:
-
In Java:
R.drawable.filename
In XML:@[package:]drawable/filename - syntax:
-
<?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"] />
- elements:
- example:
-
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/icon" android:tileMode="repeat" />
- see also:
Nine-patch
A NinePatch is a PNG image in which you can define stretchable regions
that Android scales when content within the view exceeds the normal image bounds. You
typically assign this type of image as the background of a view that has at least one dimension set
to "wrap_content".
When the view grows to accommodate the content, the nine-patch image
is also scaled to match the size of the view. An example use of a nine-patch image is the
background used by Android's standard Button widget, which must stretch to
accommodate the text (or image) inside the button.
As with a normal bitmap, you can reference a nine-patch file directly or from a resource defined by XML.
For a complete discussion about how to create a nine-patch file with stretchable regions, see Create resizable bitmaps (9-patch files).
Nine-patch file
- file location:
res/drawable/filename.9.png
The filename is the resource ID- compiled resource datatype:
- Resource pointer to a
NinePatchDrawable - resource reference:
-
In Java:
R.drawable.filename
In XML:@[package:]drawable/filename - example:
- With an image saved at
res/drawable/myninepatch.9.png, this layout XML applies the nine-patch to a view:<Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:background="@drawable/myninepatch" />
- see also:
XML nine-patch
An XML nine-patch is a resource defined in XML that points to a nine-patch file. The XML can specify dithering for the image.
- file location:
res/drawable/filename.xml
The filename is the resource ID- compiled resource datatype:
- Resource pointer to a
NinePatchDrawable - resource reference:
-
In Java:
R.drawable.filename
In XML:@[package:]drawable/filename - syntax:
-
<?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"] />
- elements:
<?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" />
Layer list
A LayerDrawable is a drawable object
that manages an array of other drawables. Each drawable in the list is drawn in the order of the
list. The last drawable in the list is drawn on top.
Each drawable is represented by an <item> element inside a single <layer-list> element.
- file location:
res/drawable/filename.xml
The filename is the resource ID- compiled resource datatype:
- Resource pointer to a
LayerDrawable - resource reference:
-
In Java:
R.drawable.filename
In XML:@[package:]drawable/filename - syntax:
-
<?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>
- elements:
- example:
- XML file saved at
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>
This example uses a nested
<bitmap>element to define the drawable resource for each item with a"center"gravity. This ensures that none of the images are scaled to fit the size of the container, due to resizing caused by the offset images.This layout XML applies the drawable to a view:
<ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/layers" />
The result is a stack of increasingly offset images:
- see also:
State list
A StateListDrawable is a drawable object defined in XML
that uses multiple images to represent the same graphic, depending on the state of
the object. For example, the state of a Button widget can be tapped, focused,
or neither; using a state list drawable, you can provide a different background image for each
state.
You describe the state list in an XML file. Each graphic is represented by an <item> element inside a single <selector> element. Each <item>
uses various attributes to describe the state in which it is used as the graphic for the
drawable.
During each state change, the state list is traversed top to bottom, and the first item that matches the current state is used. The selection is not based on the "best match," but rather the first item that meets the minimum criteria of the state.
- file location:
res/drawable/filename.xml
The filename is the resource ID- compiled resource datatype:
- Resource pointer to a
StateListDrawable - resource reference:
-
In Java:
R.drawable.filename
In XML:@[package:]drawable/filename - syntax:
-
<?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>
- elements:
<item>- Defines a drawable to use during certain states, as described by its attributes. Must be a
child of a
<selector>element.Attributes:
android:drawable- Drawable resource. Required. Reference to a drawable resource.
android:state_pressed- Boolean. True if this item is used when the object is tapped, such as when a button is touched; false if this item is used in the default, non-tapped state.
android:state_focused- Boolean. True if this item is used when the object has input focus, such as when the user selects a text input; false if this item is used in the default, non-focused state.
android:state_hovered- Boolean. True if this item is used when the cursor hovers over the object;
false if this item is used in the default, non-hovered state. Often, this
drawable can be the same drawable used for the "focused" state.
Introduced in API level 14.
android:state_selected- Boolean. True if this item is used when the object is the current
user selection when navigating with a directional control, such as when navigating through a list
with a D-pad; false if this item is used when the object isn't selected.
The selected state is used when
android:state_focusedisn't sufficient, such as when the list view has focus and an item within it is selected with a D-pad. android:state_checkable- Boolean. True if this item is used when the object is selectable; false if this item is used when the object isn't selectable. Only useful if the object can transition between a selectable and non-selectable widget.
android:state_checked- Boolean. True if this item is used when the object is selected; false if it is used when the object is un-selected.
android:state_enabled- Boolean. True if this item is used when the object is enabled, meaning capable of receiving touch or click events; false if it is used when the object is disabled.
android:state_activated- Boolean. True if this item is used when the object is activated as
the persistent selection, such as to "highlight" the previously selected list item in a persistent
navigation view; false if it is used when the object isn't activated.
Introduced in API level 11.
android:state_window_focused- Boolean. True if this item is used when the application window has focus, meaning the application is in the foreground; false if this item is used when the application window doesn't have focus, for example, if the notification shade is pulled down or a dialog appears.
Note: Android applies the first item in the state list that matches the current state of the object. So, if the first item in the list contains none of the preceding state attributes, then it is applied every time. This is why you want your default value to always be last, as demonstrated in the following example.
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>
This layout XML applies the state list drawable to a button:
<Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:background="@drawable/button" />
Level list
A drawable that manages a number of alternate drawables, each assigned a maximum numerical
value. Setting the level value of the drawable with setLevel() loads the drawable resource in the
level list that has an android:maxLevel value greater than or equal to the value
passed to the method.
- file location:
res/drawable/filename.xml
The filename is the resource ID- compiled resource datatype:
- Resource pointer to a
LevelListDrawable - resource reference:
-
In Java:
R.drawable.filename
In XML:@[package:]drawable/filename - syntax:
-
<?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>
- elements:
- example:
-
<?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>
Once this is applied to a
View, the level can be changed withsetLevel()orsetImageLevel(). - see also:
Transition drawable
A TransitionDrawable is a drawable object
that can cross-fade between two other drawable resources.
Each drawable is represented by an <item> element inside a single <transition> element. No more than two items are supported. To transition forward, call
startTransition(). To
transition backward, call reverseTransition().
- file location:
res/drawable/filename.xml
The filename is the resource ID- compiled resource datatype:
- Resource pointer to a
TransitionDrawable - resource reference:
-
In Java:
R.drawable.filename
In XML:@[package:]drawable/filename - syntax:
-
<?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>
- elements:
- example:
- XML file saved at
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>
This layout XML applies the drawable to a view:
<ImageButton android:id="@+id/button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/transition" />
And the following code performs a 500 ms transition from the first item to the second:
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); }
- see also:
Inset drawable
A drawable defined in XML that insets another drawable by a specified distance. This is useful when a view needs a background that is smaller than the view's actual bounds.
- file location:
res/drawable/filename.xml
The filename is the resource ID- compiled resource datatype:
- Resource pointer to a
InsetDrawable - resource reference:
-
In Java:
R.drawable.filename
In XML:@[package:]drawable/filename - syntax:
-
<?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" />
- elements:
<?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" />
Clip drawable
A drawable defined in XML that clips another drawable based on this drawable's current level. You can control how much the child drawable gets clipped in width and height based on the level, as well as a gravity to control where it is placed in its overall container. Most often used to implement things like progress bars.
- file location:
res/drawable/filename.xml
The filename is the resource ID- compiled resource datatype:
- Resource pointer to a
ClipDrawable - resource reference:
-
In Java:
R.drawable.filename
In XML:@[package:]drawable/filename - syntax:
-
<?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"] />
- elements:
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" />
The following layout XML applies the clip drawable to a view:
<ImageView android:id="@+id/image" android:src="@drawable/clip" android:layout_height="wrap_content" android:layout_width="wrap_content" />
The following code gets the drawable and increases the amount of clipping to progressively reveal the image:
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); }
Increasing the level reduces the amount of clipping and slowly reveals the image. Here it is at a level of 7000:
Note: The default level is 0, which is fully clipped so the image isn't visible. When the level is 10,000, the image isn't clipped and is completely visible.
Scale drawable
A drawable defined in XML that changes the size of another drawable based on its current level.
- file location:
res/drawable/filename.xml
The filename is the resource ID- compiled resource datatype:
- Resource pointer to a
ScaleDrawable - resource reference:
-
In Java:
R.drawable.filename
In XML:@[package:]drawable/filename - syntax:
-
<?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" />
- elements:
<?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%" />
Shape drawable
This is a generic shape defined in XML.
- file location:
res/drawable/filename.xml
The filename is the resource ID- compiled resource datatype:
- Resource pointer to a
GradientDrawable - resource reference:
-
In Java:
R.drawable.filename
In XML:@[package:]drawable/filename - syntax:
-
<?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>
- elements:
-
The following attributes are used only when
android:shape="ring":android:innerRadius- Dimension. The radius for the inner part of the ring (the hole in the middle), as a dimension value or dimension resource.
android:innerRadiusRatio- Float. The radius for the inner
part of the ring, expressed as a ratio of the ring's width. For instance, if
android:innerRadiusRatio="5", then the inner radius equals the ring's width divided by 5. This value is overridden byandroid:innerRadius. The default value is 9. android:thickness- Dimension. The thickness of the ring, as a dimension value or dimension resource.
android:thicknessRatio- Float. The thickness of the ring
expressed as a ratio of the ring's width. For instance, if
android:thicknessRatio="2", then the thickness equals the ring's width divided by 2. This value is overridden byandroid:innerRadius. The default value is 3. android:useLevel- Boolean. True if this is used as
a
LevelListDrawable. This normally is false, or else your shape might not appear.
<corners>- Creates rounded corners for the shape. Applies only when the shape is a rectangle.
Attributes:
android:radius- Dimension. The radius for all corners, as a dimension value or dimension resource. This is overridden for each corner by the following attributes.
android:topLeftRadius- Dimension. The radius for the top-left corner, as a dimension value or dimension resource.
android:topRightRadius- Dimension. The radius for the top-right corner, as a dimension value or dimension resource.
android:bottomLeftRadius- Dimension. The radius for the bottom-left corner, as a dimension value or dimension resource.
android:bottomRightRadius- Dimension. The radius for the bottom-right corner, as a dimension value or dimension resource.
Note: Every corner must initially be provided a corner radius greater than 1, or else no corners are rounded. If you want specific corners to not be rounded, a workaround is to use
android:radiusto set a default corner radius greater than 1 and then override every corner with the values you really want, providing 0 ("0dp") where you don't want rounded corners. <gradient>- Specifies a gradient color for the shape.
Attributes:
android:angle- Integer. The angle for the gradient, in degrees. 0 is left to right, 90 is bottom to top. It must be a multiple of 45. The default is 0.
android:centerX- Float. The relative X-position for the center of the gradient (0 - 1.0).
android:centerY- Float. The relative Y-position for the center of the gradient (0 - 1.0).
android:centerColor- Color. Optional color that comes between the start and end colors, as a hexadecimal value or color resource.
android:endColor- Color. The ending color, as a hexadecimal value or color resource.
android:gradientRadius- Float. The radius for the gradient. Only applied when
android:type="radial". android:startColor- Color. The starting color, as a hexadecimal value or color resource.
android:type- Keyword. The type of gradient pattern to apply. Valid values are:
Value Description "linear"A linear gradient. This is the default. "radial"A radial gradient. The start color is the center color. "sweep"A sweeping line gradient. android:useLevel- Boolean. True if this is used as a
LevelListDrawable.
<padding>- Padding to apply to the containing view element. This pads the position of the view
content, not the shape.
Attributes:
android:left- Dimension. Left padding, as a dimension value or dimension resource.
android:top- Dimension. Top padding, as a dimension value or dimension resource.
android:right- Dimension. Right padding, as a dimension value or dimension resource.
android:bottom- Dimension. Bottom padding, as a dimension value or dimension resource.
<size>- The size of the shape.
Attributes:
android:height- Dimension. The height of the shape, as a dimension value or dimension resource.
android:width- Dimension. The width of the shape, as a dimension value or dimension resource.
Note: By default, the shape scales to the size of the container view proportionate to the dimensions defined here. When you use the shape in an
ImageView, you can restrict scaling by setting theandroid:scaleTypeto"center". <solid>- A solid color to fill the shape.
Attributes:
android:color- Color. The color to apply to the shape, as a hexadecimal value or color resource.
<stroke>- A stroke line for the shape.
Attributes:
android:width- Dimension. The thickness of the line, as a dimension value or dimension resource.
android:color- Color. The color of the line, as a hexadecimal value or color resource.
android:dashGap- Dimension. The distance between line dashes, as a dimension value or dimension resource. Only valid if
android:dashWidthis set. android:dashWidth- Dimension. The size of each dash line, as a dimension value or dimension resource. Only valid if
android:dashGapis set.
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>
This layout XML applies the shape drawable to a view:
<TextView android:background="@drawable/gradient_box" android:layout_height="wrap_content" android:layout_width="wrap_content" />
This application code gets the shape drawable and applies it to a view:
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);