Android Resources
In this article, we will provide a comprehensive guide on how to access and organize Android resources with examples.
Android applications are made up of different components such as activities, services, broadcast receivers, and content providers.
These components use various resources such as images, strings, colors, and layouts to display content to the user.
What are Android Resources?
Android resources are assets that are used in an Android application to provide a user interface and other functional elements.
These resources can be accessed by the application’s code and used to build the user interface, provide translations, and define other application-specific elements.
In Android, resources are organized in a specific way to make them easy to access and manage.
Android Resources Types
There are several types of Android resources, including:
Types | Overview |
Strings | These are text-based resources that are used to display text in the user interface. You can define strings in an XML file or in the strings.xml file. |
Layouts | These resources define the structure and layout of user interface elements, such as buttons, text fields, and images. Layouts are defined in XML files. |
Colors | These resources define colors used in the user interface, such as background colors and text colors. |
Drawables | These resources include images, such as icons and logos, that are used in the user interface. |
Animations | These resources define animations that can be used to enhance the user experience. |
Dimensions | These resources define sizes and dimensions of user interface elements, such as the height and width of a button. |
Accessing Android Resources
Android provides a simple way to access resources in an application.
Resources can be accessed using the getResources() method of the Context class.
The Context class is a base class for Activity, Service, and other system components.
The following are some examples of how to access different types of resources in an Android application:
Accessing Strings
String resources can be accessed using the getString() method of the Resources class.
The getString() method takes the resource ID as an argument and returns the string value.
String nameOfApp = getResources().getString(R.string.app_name);
Accessing Images
Image resources can be accessed using the BitmapFactory class.
The BitmapFactory class provides methods to create Bitmap objects from image resources.
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.my_image);
Accessing Layouts
Layout resources can be inflated using the LayoutInflater class.
The LayoutInflater class provides methods to create View objects from layout resources.
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.my_layout, null);
Accessing Colors
Color resources can be accessed using the getColor() method of the Resources class.
The getColor() method takes the resource ID as an argument and returns the color value.
int color = getResources().getColor(R.color.my_color);
Accessing Resources in XML
In an Android application, resources can be accessed in XML files using the syntax @resource_type/resource_name. The @ symbol tells the system that the value is a resource identifier, and resource_type specifies the type of the resource, such as string, color, drawable, layout, etc. resource_name is the name of the resource.
For example, to access a string resource in an XML layout file, you would use the following syntax:
<TextView android:text="@string/string_resource" ... />
This tells the system to look for a string resource with the name ‘string_resource’ and use its value as the text for the TextView.
Similarly, to access a color resource in an XML file, you would use the following syntax:
<View android:background="@color/color_resource" ... />
This tells the system to look for a color resource with the name color_resource and use its value as the background color for the View.
Organizing Android Resources
Resources in an Android application are stored in the res directory, which is short for resources.
This directory contains several sub-directories that are used to organize different types of resources.
The following are the main sub-directories in the res directory:
sub-directory | Overview |
drawable | This directory contains image resources that can be used in an application. The images can be in different formats such as PNG, JPEG, and GIF. |
layout | This directory contains the XML files that define the layout of an application’s user interface. |
values | This directory contains different XML files that define resources such as strings, colors, dimensions, and styles. |
anim | This directory contains XML files that define animations that can be used in an application. |
raw | This directory contains raw files that can be used in an application. These files can be audio or video files, or any other type of file that does not need to be processed before use. |
xml | The xml subdirectory within res is used to store XML files that define various types of resources. For example, you can define menu items, animations, and preferences using XML files. |
row | The row subdirectory within res is used to store XML layout files for individual rows in a ListView or GridView. |
color | The color subdirectory within res is used to store XML files that define color resources. |
Alternate Resources
In Android, alternate resources serve the purpose of providing different versions of resources like layouts, drawables, and values for supporting various device configurations such as screen size, density, and language.
Utilizing alternate resources ensures that your app looks and functions optimally across a wide range of devices.
For instance, you can use different images for high-density and low-density screens or have distinct layouts for portrait and landscape orientations.
This allows your app to be adaptable and user-friendly, providing an improved user experience regardless of device specifications.
To create alternate resources in Android, you can create subdirectories in the res folder with the configuration qualifier appended to the name of the folder.
Here are some examples:
Layouts
You can create alternate layouts for different screen sizes and orientations by creating subdirectories in the res folder with the following names:
- layout-small – for devices with small screens.
- layout-large – for devices with large screens.
- layout-xlarge – for devices with extra-large screens.
- layout-land – for landscape orientation.
- layout-port – for portrait orientation.
Drawables
You can create alternate drawable resources for different screen densities by creating subdirectories in the res folder with the following names:
- drawable-ldpi – for low-density screens.
- drawable-mdpi – for medium-density screens.
- drawable-hdpi – for high-density screens.
- drawable-xhdpi – for extra-high-density screens.
- drawable-xxhdpi – for extra-extra-high-density screens.
- drawable-xxxhdpi – for extra-extra-extra-high-density screens.
Values
You can create alternate values for different languages and configurations by creating subdirectories in the res folder with the following names:
- values-es – for Spanish language resources.
- values-fr – for French language resources.
- values-sw – for Swahili language resources.
- values-w820dp – for devices with a minimum width of 820dp
To access the alternate resources in your code, you can use the resource ID generated by the Android build system. The resource ID is a unique integer value that corresponds to the name of the resource file.