Introducing Resources :
ü Resources play a key role in
Android Architecture. A resource in Android is a file (like a music file)or a
value(like the title of a dialog box) that is bound to an executable
application. These files and values are bound to the executable code so that we
can change them without need of recompiling the application.
ü Examples of resources
include strings, colors, and bitmaps.
ü We can create and store our
resource files under the appropriate subdirectory “res/” directory in our project. Android has a resource compiler
(AAPT-Android Asset Packaging Tool) that compiles resources according to which
subfolder they are in, and the format of the file.
Why We need Resources :
ü The resources are bound to
the application so that we can change them without needing to change the source
code or recompile the application.
ü The Android Generates an ID
for each resource file so we can access them directly and easily in our java
code. All the resources IDs are added to the R.Java file.
ü Using resources is very
useful in Localization and Internationalization of the application while
develop multilingual applications.
ü Resources includes not just
the labels but it can include alignment, directions images or any kind of files.
Resources class :
ü Class for accessing an
application's resources, defined in android.content.res.* package.
ü The Android resource system
refers all non-code assets associated with an application, like images, audio,
video ..etc. We can use this class to access our application's resources. We
can generally acquire the Resources instance associated
with our application with getResources().
Method :
AssetManager getAssets();
boolean getBoolean(int id);
int getColor(int id);
float getDimension(int id);
int[] getIntArray(int id);
int getInteger(int id);
Movie getMovie(int id);
String getString(int id);
String[] getStringArray(int
id);
XMLResourceParser getXML(int
id);
InputStream
openRawResource(int id);
…..etc
Configuration Class :
ü
This class describes all device
configuration information like as input modes, screen size and screen
orientation.
ü
We can get this object from
Resources
, using getConfiguration(),from
an activity, we can get it by chaining the request with getResources():Resources res=getResources();
Configuration config = res.getConfiguration();
Fields :
1.
int ORIENTATION_LANDSCAPE
2.
int ORIENTATION_PORTRAIT
3.
int ORIENTATION_SQUARE
….etc
Example : Get
Current Screen Orientation in ANDROID
The following method does the required functionality.
public int getScreenOrientation() {
//orientationis.
if
(getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_PORTRAIT){
// The following message is only displayed once.
return 1; // Portrait Mode
}else if (getResources().getConfiguration().orientation
== Configuration.ORIENTATION_LANDSCAPE) {
// The following message is only displayed once.
return 2; //
Landscape mode
}
return 0;
}
Types of Resources
- Strings, colors,
arrays, dimensions. Defined in res/values
directory. Using them is very useful in Localization and
Internationalization.
- Images put in res/drawable directory. We can put all the images or icons we
need in our application.
- Animations, defined in res/anim directory. We can define
animations.
- XML, defined in res/xml directory for xml files
containing our custom data.
- Layout resources,
defined in res/layout for
declaring the views that construct the user interface of the activities.
Resource Type
|
Location
|
Description
|
Colors
|
/res/values/any-file
|
Represents
Color identifiers pointing to color codes. Can access using R.color.*
The
XML Node in the file is /resources/<color>
|
Strings
|
/res/values/any-file
|
Represents
String resources. Can access using R.string.*.
The XML Node in the file is /resources/<string>
|
String
arrays
|
/res/values/any-file
|
Represents
a resource that is an array of strings. Can access using R.array.*. The XML Node in the file is /resources/<string-array>
|
Dimensions
|
/res/values/any-file
|
Represents
dimensions or sizes of various elements or views in Android. Supports pixels,
inches, millimeter, density independent pixels, and scale independent pixels.
Can access using R.dimen.*. The
XML Node in the file is
/resources/<dimen>
|
Images
|
/res/drawable/multiple-files
|
Represents
image resources. Supports images include .jpg, .gif, .png etc. Can access
usingChennai H O R.drawable.*
|
Arbitrary
XML files
|
/res/xml/*.xml
|
Android
allows arbitrary XML files are resources. These files will be compiled by
AAPT compiler. Can access using R.xml.*
|
Arbitrary
raw resources
|
/res/raw/*.*
|
Allows
arbitrary non compiled binary or text files under this directory like .txt,
audio or video files. Can access R.raw.*
|
Working with string
resources
/res/values/string.xml
1.
Single Value String values:
<resource>
<string
name=”name”> Mallikarjun Rao </string>
<string
name=”shortname”>MKRao </string>
</resources>
Accessing String values
in layout files (for Ex in main.xml)
<TextView …..
android:text=”@string/name”/>
</TextView>
2.
String Array Values:
<resource>
<string-array
name=”test_array”>
<item>one</item>
<item>two</item>
…etc
</string-array>
</resources>
Accessing from java code
Resources
res=this.getResources();
String
strings[]=res.getSringArray(R.array.test_array);
for(….){ …..}
Working with Boolean resources
<bool> is the tag used to
Boolean values in xml file, values may be true/false
res/values/bools.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <bool name="screen_small">true</bool> <bool name="adjust_view_bounds">true</bool> </resources>
Accessing from layout xml file (for Ex : main.xml)
<ImageView…… android:adjustViewBounds="@bool/adjust_view_bounds"/>
Accessing from Java Code :
Resources res = getResources(); boolean screenIsSmall = res.getBoolean(R.bool.screen_small);
Working with integer resources
Used to define Integer constants in xml file we can
define in two ways, are
i)
Single Value Integers :
XML file saved at
res/values/integers.xml
:<?xml version="1.0" encoding="utf-8"?> <resources> <integer name="max_speed">75</dimen> <integer name="min_speed">5</dimen> </resources>
Accessing from java code :
Resources res = getResources(); int maxSpeed = res.getInteger(R.integer.max_speed);
ii)
Integer Array :
XML file saved at
res/values/integers.xml
:<?xml version="1.0" encoding="utf-8"?> <resources> <integer-array name="bits"> <item>4</item> <item>8</item> <item>16</item> <item>32</item> </integer-array> </resources>
Accessing from java code :
Resources res = getResources(); int[] bits = res.getIntArray(R.array.bits);
Working with color resources
res/values/color.xml
<resources>
<color
name=”red”>#f00</color>
<color
name=”green”>#f0f0</color>
…etc
</resources>
Applying color to textview in layout
file (for Ex main.xml)
<TextView ….
android:textColor=”@color/red”>
</TextView>
Getting color in java code
int
color=currentactivity.getResources.getColor(R.color.red);
Working with Dimension
Resources :
Pixels, inches, and points are all
examples of dimensions that can play a part in XML layouts or Java Code.
The dimension resources can be
defined in the following units:
- Pixels: (px).
- Inches: (in).
- Millimeters: (mm).
- Points: (pt).
- Density: (dp)
density-independent pixels based on 160 dpi (dot per inch).
- Scale: (sp)
Scale-independent pixels (dimensions that allow for user sizing; helpful
for use in font sizes, image sizes..etc).
res/values/dimens.xml
<resources>
<dimen name="icon_width">55dp</dimen>
<dimen name="icon_height">55dp</dimen>
<dimen name=”medium_size”>100sp</dimen>
..etc
</resources>
Accessing from layout xml file(for Ex main.xml file)
<TextView
……android:textSize=”@dimen/medium_size”/>
Getting dimension in java code :
txtdp.setTextSize(this.getResources().getDimension(R.dimen.medium_size));
Working with image resources
ü Android generates resource
IDs for image files placed in the /res/drawable subdirectory. The supported
image types include .gif, .jpg, and .png. Each image file in this directory
generates a unique ID from its base file name. If the image file name is
sample_image.jpg, for example, then the resource ID generated will be
R.drawable.sample_image.
ü We have four types of drawable folders:
·
Low density screens (ldpi): 36x36px, 120dpi
·
Medium density screens (mdpi): 48x48px, 160dpi
·
High density screens (hdpi): 72x72px, 240dpi
·
Extra high density screens (xdpi): 96x96px, 320dpi
ü These folders are used to
put our images in to adapt to different screen sizes. For example we may create
two files of the same image, one for high density screens (hdpi) and the other
with smaller resolution for less density screens (mdpi or ldpi).
Accessing images in layout xml file
(for Ex main.xml):
<TextView …..
android:background=”@drawable/sample_image”/>
Accessing from Java code :
button.setBackgroundResource(R.drawable.icon);
Working with color drawable
resources
We can define XML files that contain
definitions for color drawable resources which are color rectangles that can be
used as backgrounds.
/res/values/myresources.xml
<resources>
<drawable name="red_box">#ff0000</drawable>
<drawable name="blue_box">#0000ff</drawable>
<drawable name="green_box">#00ff00</drawable>
</resources>
Java Code to Access :
TextView txt=(TextView)findViewById(R.id.txt);
txt.setBackgroundResource(R.drawable.redBox); (or)
txt.setBackgroundResource(R.drawable.redBox);
Example on Color Resources :
Define an Android project, add a new
Resource XML file in values folder, and modify the main.xml, run the project,
observe the output.
/res/values/mycolor.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red">#ff0000</color>
<color name="green">#00ff00</color>
<color name="blue">#0000ff</color>
</resources>
<resources>
<color name="red">#ff0000</color>
<color name="green">#00ff00</color>
<color name="blue">#0000ff</color>
</resources>
/res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/background"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Mallikarjun..Sathya "
/>
<!-- "white" defined in Android base set of colors -->
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="WHITE"
android:textColor="@android:color/white"
android:id="@+id/whitebutton"
/>
<!-- direct define textColor -->
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="RED"
android:textColor="#ff0000"
android:id="@+id/redbutton"
/>
<!-- "green" defined in mycolor.xml -->
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="GREEN"
android:textColor="@color/green"
android:id="@+id/greenbutton"
/>
<!-- "blue" defined in mycolor.xml -->
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="BLUE"
android:textColor="@color/blue"
android:id="@+id/bluebutton"
/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/background"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Mallikarjun..Sathya "
/>
<!-- "white" defined in Android base set of colors -->
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="WHITE"
android:textColor="@android:color/white"
android:id="@+id/whitebutton"
/>
<!-- direct define textColor -->
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="RED"
android:textColor="#ff0000"
android:id="@+id/redbutton"
/>
<!-- "green" defined in mycolor.xml -->
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="GREEN"
android:textColor="@color/green"
android:id="@+id/greenbutton"
/>
<!-- "blue" defined in mycolor.xml -->
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="BLUE"
android:textColor="@color/blue"
android:id="@+id/bluebutton"
/>
</LinearLayout>
No comments:
Post a Comment