Android resources are non-code files organized in the res/ directory. They are accessed via the R class.
| Directory | Purpose |
|---|---|
| res/drawable/ | Images, shapes, vector drawables, selectors |
| res/values/ | Strings, colors, dimensions, themes, styles |
| res/layout/ | XML layout files |
| res/mipmap/ | Launcher icons (multiple densities) |
| res/font/ | Custom font files (TTF, OTF) |
| res/raw/ | Raw files (audio, video, JSON) |
<!-- res/values/strings.xml -->
<resources>
<string name="app_name">My Android App</string>
<string name="welcome_message">Welcome, %1$s!</string>
<string name="item_count">%d items remaining</string>
<string-array name="months">
<item>January</item>
<item>February</item>
<item>March</item>
</string-array>
</resources>
// Access in code
getString(R.string.welcome_message, "Alice")
resources.getStringArray(R.array.months)
// Access in XML
android:text="@string/welcome_message"
android:text="@string/welcome_message"
<!-- res/values/colors.xml -->
<resources>
<color name="primary">#FF6200EE</color>
<color name="primaryDark">#FF3700B3</color>
<color name="accent">#FF03DAC5</color>
<color name="background">#FFFFFFFF</color>
<color name="textPrimary">#FF1C1B1F</color>
<color name="textSecondary">#FF49454F</color>
</resources>
// Access
ContextCompat.getColor(this, R.color.primary)
android:background="@color/background"
<!-- res/values/dimens.xml -->
<resources>
<dimen name="padding_small">8dp</dimen>
<dimen name="padding_medium">16dp</dimen>
<dimen name="padding_large">24dp</dimen>
<dimen name="text_size_title">20sp</dimen>
<dimen name="text_size_body">14sp</dimen>
<dimen name="elevation_card">4dp</dimen>
</resources>
// Access
resources.getDimension(R.dimen.padding_medium)
android:padding="@dimen/padding_medium"
<!-- res/values/themes.xml (Material 3) -->
<resources>
<style name="Theme.MyApp" parent="Theme.Material3.DayNight.NoActionBar">
<item name="colorPrimary">@color/primary</item>
<item name="colorOnPrimary">@color/white</item>
<item name="colorSecondary">@color/secondary</item>
<item name="android:colorBackground">@color/background</item>
<item name="colorSurface">@color/surface</item>
<item name="colorOnSurface">@color/textPrimary</item>
</style>
<style name="Widget.MyApp.Button" parent="Widget.Material3.Button">
<item name="cornerRadius">12dp</item>
<item name="iconTint">@color/white</item>
</style>
</resources>
<!-- res/drawable/ic_search.xml (vector drawable) -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z" />
</vector>
// Shape drawable
<!-- res/drawable/rounded_button.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/primary" />
<corners android:radius="24dp" />
<padding android:left="16dp" android:right="16dp"
android:top="8dp" android:bottom="8dp" />
</shape>
// res/raw/config.json
InputStream stream = resources.openRawResource(R.raw.config);
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
val jsonString = reader.readText()
// Access in code
R.raw.sound_effect // Returns resource ID