blob: 3f0f1eeb961164fdbe862f0a1d596c88de863fbb [file] [log] [blame]
Scott Mainf940a1f2010-02-09 18:48:27 -08001page.title=Application Resources
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002@jd:body
3
4<div id="qv-wrapper">
5<div id="qv">
Scott Mainf940a1f2010-02-09 18:48:27 -08006 <h2>Topics</h2>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08007 <ol>
Scott Mainf940a1f2010-02-09 18:48:27 -08008 <li><a href="providing-resources.html">Providing Resources</a></li>
9 <li><a href="accessing-resources.html">Accessing Resources</a></li>
10 <li><a href="runtime-changes.html">Handling Runtime Changes</a></li>
11 <li><a href="localization.html">Localization</a></li>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080012 </ol>
13
Scott Mainf940a1f2010-02-09 18:48:27 -080014 <h2>Reference</h2>
15 <ol>
16 <li><a href="available-resources.html">Resource Types</a></li>
17 </ol>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080018</div>
19</div>
20
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080021
Scott Mainf940a1f2010-02-09 18:48:27 -080022<p>You should always externalize resources such as images and strings from your application
23code, so that you can maintain them independently. Externalizing your
24resources also allows you to provide alternative resources that support specific device
25configurations such as different languages or screen sizes, which becomes increasingly
26important as more Android-powered devices become available with different configurations. In order
Scott Main821ca512010-06-16 11:06:43 -070027to provide compatibility with different configurations, you must organize resources in your
28project's {@code res/} directory, using various sub-directories that group resources by type and
29configuration.</p>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080030
Scott Maine63163a2012-01-03 10:10:21 -080031<div class="figure" style="width:429px">
32<img src="{@docRoot}images/resources/resource_devices_diagram1.png" height="167" alt="" />
Scott Mainf940a1f2010-02-09 18:48:27 -080033<p class="img-caption">
Scott Maine63163a2012-01-03 10:10:21 -080034<strong>Figure 1.</strong> Two different devices, each using the default layout
35(the app provides no alternative layouts).</p>
Scott Mainf940a1f2010-02-09 18:48:27 -080036</div>
37
Scott Maine63163a2012-01-03 10:10:21 -080038<div class="figure" style="width:429px">
39<img src="{@docRoot}images/resources/resource_devices_diagram2.png" height="167" alt="" />
Scott Mainf940a1f2010-02-09 18:48:27 -080040<p class="img-caption">
Scott Maine63163a2012-01-03 10:10:21 -080041<strong>Figure 2.</strong> Two different devices, each using a different layout provided
42for different screen sizes.</p>
Scott Mainf940a1f2010-02-09 18:48:27 -080043</div>
44
45<p>For any type of resource, you can specify <em>default</em> and multiple
46<em>alternative</em> resources for your application:</p>
47<ul>
48 <li>Default resources are those that should be used regardless of
49the device configuration or when there are no alternative resources that match the current
50configuration.</li>
51 <li>Alternative resources are those that you've designed for use with a specific
52configuration. To specify that a group of resources are for a specific configuration,
53append an appropriate configuration qualifier to the directory name.</li>
54</ul>
55
56<p>For example, while your default UI
Scott Maine63163a2012-01-03 10:10:21 -080057layout is saved in the {@code res/layout/} directory, you might specify a different layout to
Scott Mainf940a1f2010-02-09 18:48:27 -080058be used when the screen is in landscape orientation, by saving it in the {@code res/layout-land/}
Scott Main821ca512010-06-16 11:06:43 -070059directory. Android automatically applies the appropriate resources by matching the
Scott Mainf940a1f2010-02-09 18:48:27 -080060device's current configuration to your resource directory names.</p>
61
Scott Maine63163a2012-01-03 10:10:21 -080062<p>Figure 1 illustrates how the system applies the same layout for
63two different devices when there are no alternative resources available. Figure 2 shows
64the same application when it adds an alternative layout resource for larger screens.</p>
Scott Mainf940a1f2010-02-09 18:48:27 -080065
Scott Maine63163a2012-01-03 10:10:21 -080066<p>The following documents provide a complete guide to how you can organize your application resources,
Scott Mainf940a1f2010-02-09 18:48:27 -080067specify alternative resources, access them in your application, and more:</p>
68
69<dl>
70 <dt><strong><a href="providing-resources.html">Providing Resources</a></strong></dt>
71 <dd>What kinds of resources you can provide in your app, where to save them, and how to create
72alternative resources for specific device configurations.</dd>
73 <dt><strong><a href="accessing-resources.html">Accessing Resources</a></strong></dt>
74 <dd>How to use the resources you've provided, either by referencing them from your application
75code or from other XML resources.</dd>
76 <dt><strong><a href="runtime-changes.html">Handling Runtime Changes</a></strong></dt>
77 <dd>How to manage configuration changes that occur while your Activity is running.</dd>
78 <dt><strong><a href="localization.html">Localization</a></strong></dt>
79 <dd>A bottom-up guide to localizing your application using alternative resources. While this is
80just one specific use of alternative resources, it is very important in order to reach more
81users.</dd>
82 <dt><strong><a href="available-resources.html">Resource Types</a></strong></dt>
83 <dd>A reference of various resource types you can provide, describing their XML elements,
84attributes, and syntax. For example, this reference shows you how to create a resource for
85application menus, drawables, animations, and more.</dd>
86</dl>
87
88<!--
89<h2>Raw Assets</h2>
90
91<p>An alternative to saving files in {@code res/} is to save files in the {@code
92assets/} directory. This should only be necessary if you need direct access to original files and
93directories by name. Files saved in the {@code assets/} directory will not be given a resource
94ID, so you can't reference them through the {@code R} class or from XML resources. Instead, you can
95query data in the {@code assets/} directory like an ordinary file system, search through the
96directory and
97read raw data using {@link android.content.res.AssetManager}. For example, this can be more useful
98when dealing with textures for a game. However, if you only need to read raw data from a file
99(such as a video or audio file), then you should save files into the {@code res/raw/} directory and
100then read a stream of bytes using {@link android.content.res.Resources#openRawResource(int)}. This
101is uncommon, but if you need direct access to original files in {@code assets/}, refer to the {@link
102android.content.res.AssetManager} documentation.</p>
103-->