UNDERSTANDING THE ROLE
OF ANDROID APPLICATION
COMPONENTS
1
Outline
•Introduction to Android
•Getting Started
•Android Programming
2
•The Android Project Wizard creates all the
required files for an Android application.
•To create an application, open Eclipse and
choose,
File, New, Android Application
Project
or click the Android Project Creator
icon on the Eclipse toolbar.
3
UNDERSTANDING THE UTILITY OF ANDROID API
The framework API consists of a core set of packages and classes; XML
elements for declaring layouts, resources, and so on; a manifest file to
configure applications; permissions that applications might require; intents;
and much more.
4
Package Explorer
window
5
OVERVIEW OF THE ANDROID PROJECT FILES
•/src
folder
—The folder that contains the entire Java source file of the application. The folder contains a directory
structure corresponding to the package name supplied in the application. The folder contains the project’s default
package:
com.androidunleashed.welcomemsg. On expanding the package, you find the Activity of the application,
the
WelcomeMsgActivity.java file, within it.
••
/src/com.androidunleashed.welcomemsg—Refers to the package name of the application. To avoid any collision
among the class names, variable names, and so on used in the application with those of other Android applications, each
application has to be packaged in a unique container.
••
/src/com.androidunleashed.welcomemsg/WelcomeMsgActivity.java—The default Activity file of the application.
Recall that each application has at least one Activity that acts as the main entry point to the application. The Activity file
is automatically defined as the default launch Activity in the Android Manifest file.
••
/gen
folder
—Contains Java files generated by ADT on compiling the application. That is, the
genfolder will come into
existence after compiling the application for the first time. The folder contains anR.java
file that contains references for
all the resources defined in the
res directory. It also contains a BuildConfig.java file that is used to run code only in debug
mode. It contains a
DEBUG constant that helps in running debug-only functions.
••
/gen/com.androidunleashed.welcomemsg/R.java—All the layout and other resource information that is coded in the
XML files is converted into Java source code and placed in the
R.java file. It also means that the file contains the ID of
all the resources of the application. The
R.java file is compiled into the Java byte code files and then converted
into
.dex format. You should never edit this file by hand, as it is automatically overwritten when you add or edit
resources.
6
•Android SDK
jar file
—The
jar file for the target platform.
•/assets
folder
—The
assets folder is empty by default. It stores raw asset
files that may be required in the application. It may contain fonts, external
JAR files, and so on to be used in the application. The
assets folder is like a
resource folder where uncompiled resources of the project are kept and no
IDs are generated for the resources kept here.
•/bin
folder
—The folder that stores the compiled version of the application.
•/res
folder
—The folder where all application resources (images, layout
files, and string files) are kept. Instead of hard coding an image or string in
an application, a better approach is to create a respective resource in
the
res folder and include its reference in the application.
7
•/res/drawable-xhdpi,
/res/drawable-hdpi, /res/drawable-mdpi, /res/drawable-
ldpi—the application’s icon and graphic resources are kept in these folders.
Because devices have screens of different densities, the graphics of different
resolutions are kept in these folders. Usually, graphics of 320dpi, 240dpi, 160dpi,
and 120dpi are used in Android applications.
•/res/layout—Stores the layout file(s) in XML format.
•/res/values—Stores all the values resources. The values resources include many
types such as string resource, dimension resource, and color resource.
•/res/layout/activity_welcome_msg.xml—The layout file used
by
WelcomeMsgActivity to draw views on the screen. The views or controls are
laid in the specified layout.
•/res/values/strings.xml—Contains the string resources. String resources contain
the text matter to be assigned to different controls of the applications. This file also
defines string arrays.
8
•AndroidManifest.xml—The central configuration file for the application.
•proguard.cfg—Defines how ProGuard optimizes the application’s code.
ProGuard is a tool that removes unused code from the Android application
and optimizes it, which increases performance. It is also used to obfuscate
the code to help protect it from decompilation.
•project.properties—A build file used by Eclipse and the Android ADT
plug-in. It contains project settings such as the build target. You can use
this file to change various properties of the project. If required, the file
should not be edited directly but through editors available in Eclipse.
9
•Listing 2.1. Default Code in the
WelcomeMsgActivity.java File
•package com.androidunleashed.welcomemsg;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class WelcomeMsgActivity extends Activity {
•Every unique screen the user interacts with in an
application is displayed through an Activity—one Activity
for each screen.
•Users can interact with an application by performing
different actions with the visual controls found in the
Activity. A simple application may consist of just one
Activity, whereas large applications contain several
Activities.
•The transition from one Activity to another is
accomplished through the use of asynchronous messages
called
intents.
11
UNDERSTANDING ACTIVITIES
•Intents can be used to pass data from one Activity
to another. All of the Activities in the application
must be defined in the Application’s manifest file.
•an XML file that keeps track of all the components
and permissions of the application.
•Each Activity in an Android application is either a
direct subclass of the
Activity base class or a
subclass of an
Activitysubclass.
12
•The Android Activity life cycle defines the states or events that an Activity
goes through from the time it is created until it finishes running.
•The Activity monitors and reacts to these events by executing methods that
override the
Activity class methods for each event.
13
Understanding the Android Activity Life Cycle
14
•The configuration file
AndroidManifest.xml is created by
ADT when creating a new Android project and is kept in the
project’s root directory.
•It’s an XML file that defines the overall structure and
information about the application, for example, the activities,
services, and intents used in the application
15
ROLE OF THE ANDROID MANIFEST FILE
•Listing 2.2. Default Code in the Android Manifest File
•<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.androidunleashed.welcomemsg"
•The
<manifest> tag, is the root element of this XML document and contains several
attributes:
••
android—Identifies the Android namespace used to provide several system attributes
used within the application.
••
package—Its value is set to the application’s Java package. The name of the application
package acts as the unique identifier for the application in the Android device.
••
versionCode/versionName—The
versionCode attribute is used to define the current
application version. The version is used internally to compare application versions.
The
versionName attribute is used to specify a version number that is displayed to users.
••
<uses-sdk>—This tag is optional and is used to specify the maximum, minimum, and
preferred API level required for the application to operate. Three attributes are used with
this tag as follows:
••
android:minSdkVersion—Used to specify the minimum API level required for this
application to run. The default value is “1.” For example, the following attribute says that
the minimum API level required by the application is 15:
17
CREATING THE USER INTERFACE
•There are three approaches to creating user interfaces in Android. You can
create user interfaces entirely in Java code or entirely in XML or in
both.The third approach, the
combined approach
.
•Listing 2.3. Default Code in the
activity_welcome_msg.xml File
•<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
•Listing 2.4. Code Written in the
activity_welcome_msg.xml File
•<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Enter your name:"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/user_name"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/click_btn"
android:text="Click Me"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/response"/>
</LinearLayout>
19
•The views or the controls that we want to display in an application are
arranged in an order or sequence by placing them in the desired layout.
The layouts also known as Containers or ViewGroups are used for
organizing the views or controls in the required format.
•LinearLayout—In this layout, all elements are arranged in a
descending column from top to bottom or left to right. Each element
contains properties to specify how much of the screen space it will
consume. Depending on the orientation parameter, elements are either
arranged in row or column format.
•RelativeLayout—In this layout, each child element is laid out in
relation to other child elements. That is, a child element appears in
relation to the previous child. Also, the elements are laid out in relation
to the parent.
20
COMMONLY USED LAYOUTS AND CONTROLS
•AbsoluteLayout—In this layout, each child is given a specific location
within the bounds of the parent layout object. This layout is not suitable for
devices with different screen sizes and hence is deprecated.
•FrameLayout—This is a layout used to display a single view. Views added
to this are always placed at the top left of the layout. Any other view that is
added to the
FrameLayout overlaps the previous view; that is, each view
stacks on top of the previous one.
•TableLayout—In this layout, the screen is assumed to be divided in table
rows, and each of the child elements is arranged in a specific row and
column.
•GridLayout—In this layout, child views are arranged in a grid format, that
is, in the rows and columns pattern. The views can be placed at the specified
row and column location. Also, more than one view can be placed at the
given row and column position.
21
•The following list highlights some of the controls commonly used in Android
applications:
•TextView—A read-only text label. It supports multiline display, string
formatting, and automatic word wrapping.
•EditText—An editable text box that also accepts multiline entry and word-
wrapping.
•ListView—A
ViewGroup that creates and manages a vertical list of views,
displaying them as rows within the list.
•Spinner—A
TextView and an associated list of items that allows us to select an
item from the list to display in the text box.
•Button—A standard command button.
•CheckBox—A button allowing a user to select (check) or unselect (uncheck).
•RadioButton—A mutually exclusive button, which, when selected, unselects all
other buttons in the group.
22
•The action of clicking a
Button, pressing the Enter key, or performing any
action on any control is considered an
event.
• The reaction to the event, that is, the action to be taken when the event
occurs, is called
event handling.
An event listener is an interface in the
View class that contains a single
callback method, called an event occurrence.
an instance of the implementation is passed to the respective control through
the
setOnClickListener() method.
23
EVENT HANDLING
•In this chapter we discuss three ways of event
handling:
•• Creating an anonymous inner class
•• Implementing the
OnClickListener interface
•• Declaring the event handler in the XML
definition of the control
24
•In this method of event handling, you implement a listener inline; that is,
an
anonymous class is defined with an OnClickListener interface, and
an
onClick(View v) method is implemented in it. The anonymous inner
class is passed to the listener through the
setOnClickListener() method.
25
Creating an Anonymous Inner Class
•Listing 2.5. Code Written in the
WelcomeMsgActivity.java File
•package com.androidunleashed.welcomemsg;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.Button;
import android.view.View;
public class WelcomeMsgActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome_msg);
Button b = (Button)this.findViewById(R.id.click_btn);
27
Running the Application
Figure 2.4. Run As dialog box asking the way to run the current application
Figure 2.5. (top) Application asking for the username, and
(bottom) Welcome message displayed along with the username
•Listing 2.6. Implementing the
OnClickListener Interface in the WelcomeMsgActivity.javaFile
•package com.androidunleashed.welcomemsg;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;
public class WelcomeMsgActivity extends Activity implements OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome_msg);
Button b = (Button)this.findViewById(R.id.click_btn);
•In the XML definition of a
Button in the layout file activity_welcome_msg.xml, you can add
anandroid:onClick
attribute. This attribute is used to represent the method you want to execute when a click event
occurs via the
Button control
•Listing 2.7. Declaring an Event Handler in the
activity_welcome_msg.xml File
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Enter your name:"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/user_name"/>
<Button
android:id="@+id/click_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Click Me"
android:onClick="dispMessage" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/response"/>
</LinearLayout>
29
Declaring the Event Handler in the XML Control Definition
•Listing 2.8. Adding the
dispMessage() Method to
the
WelcomeMsgActivity.java File
•package com.androidunleashed.welcomemsg;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.EditText;
public class WelcomeMsgActivity extends Activity {
•A
Toast is a transient message that automatically disappears after a
while without user interaction. It is usually used to inform the user
about happenings that are not very important and does not create a
problem if they go unnoticed. A
Toast is created by calling the static
method,
makeText(), of theToast class. The syntax of
the
makeText() method
•Toast.makeText(activity_context, string_to_display, duration)
•The method needs the
Activity (Context) String to display, as well as
the
duration for which the message is displayed on the screen. You can
also supply the ID of the String resource that you want to display. The
duration is expressed in the form of constants, such
as
Toast.LENGTH_SHORT orToast.LENGTH_LONG, to determine
the duration for which the string’s message remains on the screen.
32
DISPLAYING MESSAGES THROUGH
TOAST
•Listing 2.9.
WelcomeMsgActivity.java File for Displaying a Message
Through
Toast
•package com.androidunleashed.welcomemsg;
import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.view.View;
import android.widget.Toast;
public class WelcomeMsgActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome_msg);
}
public void dispMessage(View v) {
EditText name = (EditText) findViewById(R.id.user_name);
34
Figure 2.6. Displaying a Welcome message through
Toast
•The structure that is used to start, stop, and transition between
Activities within an application is called an
Intent.
•Describing Operations Through Intent
•An intent is a data structure that describes operations to perform in an Android application. It
consists of an action that the application needs to perform, data to operate on, and other
information helpful in executing the operation. Intent can be explicit or implicit as follows:
•Explicit Intent—In an explicit intent, you specify the Activity required to respond to the
intent; that is, you explicitly designate the target component. Because the developers of other
applications have no idea of the component names in your application, an explicit intent is
limited to be used within an application—for example, transferring internal messages.
•Implicit Intent—In an implicit intent, you just declare intent and leave it to the platform to
find an Activity that can respond to the intent. That is, you don’t specify the target
component that should respond to the intent. This type of intent is used for activating
components of other applications. It is the job of the Android platform to search for the most
suitable component to handle the implicit intent.
35
CREATING AND STARTING AN ACTIVITY
•The method used to start an activity is
startActivity(). First create an implicit or explicit
intent object and pass it to the
startActivity() method in the format shown here:
•startActivity(my_intent);
•where
my_intent refers to the intent that is passed to the method as a parameter.
ThestartActivity()
method finds and starts the single Activity that best matches the
given intent.
•To explicitly specify the Activity that you want to start through an intent, create a new
intent specifying the current application context and the class name of the activity you
want to launch and pass thisIntent
to the startActivity() method, as shown here:
•startActivity(new Intent(this, Welcome.class));
•In the preceding statement, you created an explicit intent and initialized it by passing
the Activity context, this and the
Welcome
’s
class instance, which is the activity that
you want to launch. TheIntent
object is passed to the startActivity() method, which
launches the activity described byWelcome.class. If
startActivity() is unable to find the
specified activity, anandroid.content.ActivityNotFoundException
is thrown.
36
Method Used to Start an Activity
•To create a new layout file, from the
Package
Explorer
window, right click the res/layout folder and
select the
New, Android XML File option. A dialog
box appears asking for information about the new
Android XML File. In the
File text box, enter the
filename as
welcome (no need to add
the.xml
extension). Select the
option
LinearLayout from the Root Element, which
denotes that you want to create a linear layout file,
and finally, select the
Finish button.
37
Creating Your Own Layout File
•Listing 2.11. Code Written in the
welcome.xml File
•<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Enter your name:"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/user_name"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/click_btn"
android:text="Click Me"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/response"/>
</LinearLayout>
38
•You know that an Activity file is in the form of a Java file. So,
you need to add a Java file to the
packagecom.androidunleashed.welcomeapp
that’s inside
the
src folder of the application. Click the srcnode in
the
Package Explorer window to expand it. The
packagecom.androidprogrs.welcomeapp
is displayed, showing
the default Activity fileWelcomeAppActivity.java
inside it.
•package com.androidunleashed.welcomeapp;
public class Welcome {
}
39
Creating a New Activity
•Listing 2.12. Code Written in the
Welcome.java File
•package com.androidunleashed.welcomeapp;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.EditText;
import android.widget.Button;
import android.view.View;
public class Welcome extends Activity {
</application>
</manifest>
41
Registering the New Activity
•Listing 2.14. The
WelcomeAppActivity.java File
•package com.androidunleashed.welcomeapp;
import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
public class WelcomeAppActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome_app);
startActivity(new Intent(this, Welcome.class));
}
}
42
Starting the Activity
•<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter your name"
android:singleLine="false"
android:id="@+id/user_name" />
43
USING THE
EDITTEXT
CONTROL
The
EditText
control is a subclass of
TextView
and is used for getting input from the user. You
can use several attributes to configure the
EditText
control to suit your requirements.
•android:layout_width—Used to set the width of the
EditText control. The two
valid values are wrap_content
and match_parent. The value wrap_content sets the
width of the
EditTextcontrol to accept only a single character. When the user types
text, the width of the
EditText control automatically increases to accommodate the
new content. Also, the cursor moves to the next line when the boundary of the
container is reached. No text scrolling takes place unless
theandroid:scrollHorizontally
attribute is set to "true". In this case, instead of moving
to the next line, the text scrolls left to accommodate the newly typed content. If the
value of theandroid:layout_width
attribute is set to match_parent, the width of
the
EditText control is set equal to the width of its container. When the user types the
text beyond the available width, the cursor moves to the next line.
••
android:layout_height—Used to set the height of the
EditText control. Valid
values arewrap_content
and match_parent. When the value wrap_content is assigned
to the control, the height of the
EditText control increases when typing text beyond
the width of the control. If the valuematch_parent
is assigned to the control, text
expands the height of the control to fill up the height of the container.
44
Attributes Used to Configure the
EditText
Control
••
android:singleLine—When set to
true, forces the EditText control to remain on a single
line. That is, on reaching the end of the available width, the text that is typed in scrolls to the
left. If the value is set to
false, the cursor moves to the next line when the end of the available
width of the control is reached.
••
android:hint—Displays helpful text in the
EditText control to guide user entry. The text
automatically disappears when the user enters data. For example,
android:hint="Enter your
name"
displays the text Enter your name in the EditText control to indicate that a name has to
be entered in this
EditText control.
••
android:lines—Sets the height of the
EditText control to accommodate the specified
number of lines. For example,
android:lines="5" sets the height of EditText control to
accommodate five lines. Typing text beyond the fifth line causes the text to scroll up to
accommodate input.
••
android:textSize—Sets the size of the text typed in the
EditText control. You can specify
the size in any of the following units of measurement:
px, in, mm, pts, dip, and sp. For
example,android:textSize="15px"
sets the size of text typed in the EditText control to 15
pixels. The recommended unit for text size is
sp as it works correctly across different screen
sizes and densities.
45
•android:capitalize—Automatically converts typed text into capital letters. The valid values
are
none,characters, words, and sentences. The value none does not capitalize anything. The
valuecharacters
capitalizes every character. The value words capitalizes the first character of every
word. The value
sentences capitalizes the first character of the first word of each sentence.
• android:password—When set to
true, the attribute converts the typed characters into dots to hide
entered text.
•android:minWidth—Used to specify the minimum width of the control.
•android:maxWidth—Used to specify the maximum width of the control. Text typed beyond the
maximum width scrolls if the
android:scrollHorizontally attribute is set to true; otherwise, it moves
onto the next line.
•android:minHeight—Used to specify the minimum height of the control.
•android:maxHeight—Used to specify the maximum height of the control.
•android:scrollHorizontally—When set to
true, makes the text scroll horizontally if typed beyond the
specified width of the control.
•android:inputType—Specifies the type of data that will be typed in the
EditText control. This
attribute configures the onscreen keyboard too. There are many possible values that
include
number,phone, text, textCapCharacters, textCapWords, textEmailAddress, datetime, date,time,
textAutoCorrect, textMultiLine, and textPassword.
46
•Listing 2.15. The
activity_edit_text_app.xml File
•<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter your name"
android:id="@+id/user_name"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/response"/>
</LinearLayout>
47
Adding an Event Listener to the
EditText
Control
•Listing 2.16. The
EditTextAppActivity.java File
•package com.androidunleashed.edittextapp;
import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;
import android.view.View;
import android.view.View.OnKeyListener;
import android.view.KeyEvent;
public class EditTextAppActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_text_app);
final TextView resp = (TextView)this.findViewById(R.id.response);
final EditText username = (EditText) findViewById(R.id.user_name);
username.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_UP) && (keyCode ==
KeyEvent.KEYCODE_ENTER)) {
resp.setText("Welcome "+username.getText()+" !");
return true;
}
return false;
}
});
}
}
48
49
Figure 2.8.
EditTextApp displaying the hint text Enter your name (top),
and welcome message displayed when the Enter key is pressed (bottom)
• isChecked()—Determines whether the check
box is checked
• setChecked()—Sets or changes the state of
the check box
• toggle()—Toggles the state of the check box
from checked to unchecked or vice versa
50
CHOOSING OPTIONS WITH
CHECKBOX
A
checkbox
control has two states:
checked
and
unchecked.
When the check box is selected,
it toggles its state from checked to unchecked and vice versa. A check box is created via
an instance ofandroid.widget.CheckBox.
•<CheckBox
android:id="@+id/purchase"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="Purchase" />
51
•Listing 2.17. The
activity_check_box_app.xml File
•<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Select Items you want"/>
<CheckBox
android:id="@+id/checkbox_pizza"
android:layout_height="wrap_content"
android:text="Pizza $15"
android:layout_width="match_parent" />
<CheckBox
android:id="@+id/checkbox_hotdog"
android:layout_height="wrap_content"
android:text="Hot Dog $5"
android:layout_width="match_parent" />
<CheckBox
android:id="@+id/checkbox_burger"
android:layout_height="wrap_content"
android:text="Burger $10"
android:layout_width="match_parent" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/bill_btn"
android:text="Calculate Bill"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/amount"/>
</LinearLayout>
52
•Listing 2.18. The
CheckBoxAppActivity.java File
•package com.androidunleashed.checkboxapp;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.widget.CheckBox;
import android.view.View;
import android.view.View.OnClickListener;
public class CheckBoxAppActivity extends Activity implements OnClickListener {
CheckBox c1,c2,c3;
TextView resp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_check_box_app);
Button b = (Button)this.findViewById(R.id.bill_btn);
android:text="Three Star" />
</RadioGroup>
54
CHOOSING MUTUALLY EXCLUSIVE ITEMS
USING
RADIOBUTTONS
• isChecked()—Detects whether the
RadioButton control is
selected.
•toggle()—Toggles the state of the
RadioButton from selected
to unselected and vice versa.
•check()—Checks a specific
RadioButton whose ID is supplied
in the method.
•getCheckedRadioButtonId()—Gets the ID of the currently
selected
RadioButton control. It returns –1 if
no
RadioButton control is checked.
55
•Listing 2.19. The
activity_radio_button_app.xml File
•<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Select the type of hotel"/>
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton android:id="@+id/radio_fivestar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Five Star " />
<RadioButton android:id="@+id/radio_threestar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Three Star" />
</RadioGroup>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/hoteltype"/>
</LinearLayout>
56
•Listing 2.20. The
RadioButtonAppActivity.java File
•package com.androidunleashed.radiobuttonapp;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.RadioButton;
import android.view.View;
import android.view.View.OnClickListener;
public class RadioButtonAppActivity extends Activity {
selectedHotel.setText("The hotel type selected is: " +rb.getText());
}
};
}
57
58
Figure 2.10.
RadioButton controls displayed on application startup
(left),
TextViewdisplaying the message when the Five Star RadioButton is selected
(middle), andTextView
displaying the message when the Three Star RadioButton is
selected (right)
• Listing 2.21. The
activity_radio_button_app.xml File with Two RadioGroup Controls
• <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Select the type of hotel"/>
<RadioGroup android:id="@+id/group_hotel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton android:id="@+id/radio_fivestar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Five Star " />
<RadioButton android:id="@+id/radio_threestar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Three Star" />
</RadioGroup>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Select the type of room"/>
<RadioGroup android:id="@+id/group_room"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton android:id="@+id/radio_suite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Grand Suite " />
<RadioButton android:id="@+id/radio_luxury"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Luxury Room" />
<RadioButton android:id="@+id/radio_ordinary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ordinary Room" />
</RadioGroup>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/hoteltype" />
</LinearLayout>
59
•Listing 2.22. The
RadioButtonAppActivity.java File
•package com.androidunleashed.radiobuttonapp;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.RadioButton;
import android.view.View;
import android.view.View.OnClickListener;
public class RadioButtonAppActivity extends Activity {
62
Figure 2.11.
RadioButton controls in two RadioGroups (left), TextView informing
that the Five Star
RadioButton and the Grand Suite Room RadioButton are selected
(middle), and
TextView informing that the Three Star RadioButton and the Grand
Suite
RadioButton are selected (right)