0% found this document useful (0 votes)
3 views67 pages

Android Chapter04 User Interfaces

This document provides an overview of Android user interfaces, focusing on the View class, XML layouts, and various UI components. It explains how to use Views and ViewGroups to create interactive layouts, detailing common layout types such as LinearLayout, RelativeLayout, and TableLayout. Additionally, it includes examples of XML layout definitions and Java code to demonstrate how to implement UI elements in Android applications.

Uploaded by

UMME KULSUM
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views67 pages

Android Chapter04 User Interfaces

This document provides an overview of Android user interfaces, focusing on the View class, XML layouts, and various UI components. It explains how to use Views and ViewGroups to create interactive layouts, detailing common layout types such as LinearLayout, RelativeLayout, and TableLayout. Additionally, it includes examples of XML layout definitions and Java code to demonstrate how to implement UI elements in Android applications.

Uploaded by

UMME KULSUM
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Part 4

Android – User Interfaces


Using XML Layouts
Victor Matos
Cleveland State University

Notes are based on:


The Busy Coder's Guide to Android Development
by Mark L. Murphy
Copyright © 2008-2009 CommonsWare, LLC.
ISBN: 978-0-9816780-0-9
&
Android Developers
[Link]
4. Android – UI - User Interfaces

The View Class


• The View class represents the basic building block for user interface
components.

• A View occupies a rectangular area on the screen and is responsible


for drawing and event handling.

• View is the base class for widgets, which are used to create
interactive UI components (buttons, text fields, etc.).

• The ViewGroup subclass is the base class for layouts, which are
invisible containers that hold other Views (or other ViewGroups) and
define their layout properties.

2
4. Android – UI - User Interfaces

Using Views
All of the views in a window are arranged in a single tree.
You can add views either from code or by specifying a tree of views in
one or more XML layout files.
Once you have created a tree of views, there are typically a few types of
common operations you may wish to perform:

1. Set properties: for example setting the text of a TextView. Properties


that are known at build time can be set in the XML layout files.
2. Set focus: The framework will handled moving focus in response to user
input. To force focus to a specific view, call requestFocus().
3. Set up listeners: Views allow clients to set listeners that will be notified
when something interesting happens to the view. For example, a
Button exposes a listener to notify clients when the button is clicked.
4. Set visibility: You can hide or show views using setVisibility(int).

3
4. Android – UI - User Interfaces

A brief sample of UI components


Layouts

Linear Layout Relative Layout Table Layout


A LinearLayout is a A RelativeLayout is a ViewGroup A TableLayout is a
GroupView that will lay that allows you to layout child ViewGroup that will lay
child View elements elements in positions relative to child View elements into
vertically or horizontally. the parent or siblings elements. rows and columns.

4
4. Android – UI - User Interfaces

A brief sample of UI components


Widgets

GalleryView

TabWidget

Spinner

DatePicker Form Controls


A DatePicke is a widget Includes a variety of typical
that allows the user to form widgets, like:
select a month, day and image buttons,
year. text fields,
checkboxes and
radio buttons.
5
4. Android – UI - User Interfaces

A brief sample of UI components


WebView

MapView

AutoCompleteTextView ListView
It is a version of the EditText A ListView is a View that
widget that will provide shows items in a vertically
auto-complete suggestions scrolling list. The items are
as the user types. The acquired from a ListAdapter.
suggestions are extracted
from a collection of strings.
6
4. Android – UI - User Interfaces

What is an XML Layout?


An XML-based layout is a specification of the various UI
components (widgets) and the relationships to each other – and to
their containers – all written in XML format.

Android considers XML-


based layouts to be
resources, and as such
layout files are stored in the
res/layout directory inside
your Android project.

7
4. Android – UI - User Interfaces

What is an XML Layout?


ASIDE

You could create Layout XML files using UI tools such as:

• Eclipse ADT UI Designer (getting better but still…)

• DroidDraw (to be phased out soon???)

• Asset Studio (probably the best option, not available yet)

More on this issue later…

8
4. Android – UI - User Interfaces

What is an XML Layout?


Each XML file contains a tree of elements specifying a layout of
widgets and containers that make up one View (shown later).

The attributes of the XML elements are properties, describing how


a widget should look or how a container should behave.

Example:
If a Button element has an attribute value of
android:textStyle = "bold"
that means that the text appearing on the face of the button
should be rendered in a boldface font style.

9
4. Android – UI - User Interfaces

An example
The application places a button to occupy the screen.
When clicked the button’s text shows current time.
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class AndDemo extends Activity {


Button btn;

@Override
public void onCreate(Bundle icicle) {
[Link](icicle);
setContentView([Link]);
btn = (Button) findViewById([Link]);
[Link](new OnClickListener() {
@Override
public void onClick(View v) {
updateTime();
}
});
}// onCreate
//
private void updateTime() {
[Link](new Date().toString());
}

} 10
4. Android – UI - User Interfaces

An example
This is the XML-Layout definition

<?xml version="1.0" encoding="utf-8"?>


<Button
xmlns:android="[Link]
android:id="@+id/myButton"
android:text=""
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>

The root element needs to declare the Android XML namespace:


xmlns:android="[Link]
All other elements will be children of the root and will inherit that namespace declaration.

Because we want to reference this button from our Java code, we need to give
it an identifier via the android:id attribute.

11
4. Android – UI - User Interfaces

An example cont.
<?xml version="1.0" encoding="utf-8"?>
<Button
xmlns:android="[Link]
android:id="@+id/myButton"
android:text=""
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
The remaining attributes are properties of this Button instance:

• android:text indicates the initial text to be displayed on the button face (in this case,
an empty string)

• android:layout_width and android:layout_height tell Android to have the button's


width and height fill the "parent“ container, in this case the entire screen.

12
4. Android – UI - User Interfaces

Look for your SDK folder, usually:


UI Hierarchy
C:/your_sdk_path/android_sdk_windows/tools

UI
Tree

The utility HierarchyViewer displays the UI structure of the current screen


shown on the emulator or device.

( Execute app on emulator, execute HierarchyViewer, click on Emulator >


Refresh Screenshot )
13
4. Android – UI - User Interfaces

Android Layouts
Each element in the XML Layout is either a View or ViewGroup object

14
4. Android – UI - User Interfaces

Android Layouts
Displaying the Application’s View

The Android UI Framework paints the screen by walking the View tree by
asking each component to draw itself in a pre-order traversal way.

Each component draws itself and then asks each of its children to do the
same.

See: Android – Application Development, by R. Rogers et al. O’Reilly Pub. 2009, ISBN 978-0-596-52147-0
15
4. Android – UI - User Interfaces

Android Layouts
Example: Display UI Hierarchy
Using SDK
older than r8.

vertical

Horizontal 1

Horizontal 2

See: Android – Application Development, by R. Rogers et al. O’Reilly Pub. 2009, ISBN 978-0-596-52147-0
16
4. Android – UI - User Interfaces

Android Layouts
Example: Display UI Hierarchy (Using SDK Revision 8)

vertical
UI
Tree

Horizontal 1

Horizontal 2

17
4. Android – UI - User Interfaces

Android Layouts
Example: Display UI Hierarchy
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical" xmlns:android="[Link]
<LinearLayout android:id="@+id/LinearLayout02"
android:layout_width="fill_parent" android:layout_height="wrap_content">
<EditText android:id="@+id/txtXcoord" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="X Coord"
android:layout_weight="1">
</EditText>
<EditText android:id="@+id/edtYcoord" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Y Coord"
android:layout_weight="1">
</EditText>
</LinearLayout>
<LinearLayout android:id="@+id/LinearLayout03"
android:layout_width="fill_parent" android:layout_height="wrap_content">
<Button android:id="@+id/btnRed" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="red"
android:layout_weight="1">
</Button>
<Button android:id="@+id/btnGreen" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="green"
android:layout_weight="1">
</Button>
</LinearLayout>
</LinearLayout>
See: Android – Application Development, by R. Rogers et al. O’Reilly Pub. 2009, ISBN 978-0-596-52147-0
18
4. Android – UI - User Interfaces

Common Layouts
There are five basic types of Layouts:
Frame, Linear, Relative, Table, and Absolute.

1. FrameLayout
FrameLayout is the simplest type of layout object. It's basically a blank
space on your screen that you can later fill with a single object — for
example, a picture that you'll swap in and out.

All child elements of the FrameLayout are pinned to the top left corner of
the screen; you cannot specify a different location for a child view.

Subsequent child views will simply be drawn over previous ones, partially
or totally obscuring them (unless the newer object is transparent).
19
4. Android – UI - User Interfaces

Common Layouts
2. LinearLayout
LinearLayout aligns all children in a single direction — vertically or
horizontally depending on the android:orientation attribute.

All children are stacked one after the other, so a


• vertical list will only have one child per row, no matter how wide
they are, and a
• horizontal list will only be one row high (the height of the tallest
child, plus padding).

A LinearLayout respects margins between children and the gravity (right,


center, or left alignment) of each child.

20
4. Android – UI - User Interfaces

Common Layouts
2. LinearLayout
You may attribute a weight to children of a LinearLayout.
Weight gives an "importance" value to a view, and allows it to expand to fill any remaining
space in the parent view.
Example:
The following two forms represent a LinearLayout
with a set of elements: a button, some labels and
text boxes. The text boxes have their width set to
fill_parent; other elements are set to wrap_content.
The gravity, by default, is left.

The difference between the two versions of the


form is that the form on the left has weight values
unset (0 by default), while the form on the right has
the comments text box weight set to 1. If the Name
textbox had also been set to 1, the Name and
Comments text boxes would be the same height.

21
4. Android – UI - User Interfaces

Common Layouts
3. TableLayout
1. TableLayout positions its children into rows and columns.
2. TableLayout containers do not display border lines.
3. The table will have as many columns as the row with the most cells.
4. A cell could be empty, but cannot span columns, as they can in HTML.
5. A TableRow object defines a single row in the table.
6. A row has zero or more cells, each cell is defined by any kind of other View.
7. A cell may also be a ViewGroup object.

22
4. Android – UI - User Interfaces

Common Layouts
<?xml version="1.0" encoding="utf-8"?> TableLayout Example
<TableLayout
xmlns:android="[Link]
The following sample layout has
android:layout_width="fill_parent" two rows and two cells in each.
android:layout_height="fill_parent" The accompanying screenshot
android:stretchColumns="*"> shows the result, with cell
<TableRow> borders displayed as dotted
<TextView android:text="Open…" lines (added for visual effect).
android:padding="3dip" />
<TextView android:text="Ctrl-O"
android:gravity="right"
android:padding="3dip" />
</TableRow>
<TableRow>
<TextView android:text="Save As…"
android:padding="3dip" />
<TextView android:text="Ctrl-Shift-S"
android:gravity="right"
android:padding="3dip" />
</TableRow>
</TableLayout> 23
4. Android – UI - User Interfaces

Common Layouts
4. RelativeLayout
1. RelativeLayout lets child views specify their position relative to the parent
view or to each other (specified by ID).

2. You can align two elements by right border, or make one below another,
centered in the screen, centered left, and so on.

3. Elements are rendered in the order given, so if the first element is centered
in the screen, other elements aligning themselves to that element will be
aligned relative to screen center.

4. Also, because of this ordering, if using XML to specify this layout, the
element that you will reference (in order to position other view objects)
must be listed in the XML file before you refer to it from the other views via
its reference ID.
24
4. Android – UI - User Interfaces

Common Layouts
4. RelativeLayout
5. The defined RelativeLayout parameters are (android:layout_...) :

• width, height,
• below, above
• alignTop, alignParentTop,
• alignBottom, alignParentBottom
• toLeftOf, toRightOf
• padding [Bottom|Left|Right|Top], and
• margin [Bottom|Left|Right|Top].
For example, assigning the parameter

android:layout_toLeftOf=“@+id/my_button"
to a TextView would place the TextView to the left of the View with the ID my_button
25
4. Android – UI - User Interfaces

Common Layouts
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="[Link]
android:layout_width="fill_parent"
android:layout_height="wrap_content" RelativeLayout Example
android:background="#ff0000ff"
android:padding="10px" >
The example below shows an XML file
<TextView android:id="@+id/label" and the resulting screen in the UI. Note
android:layout_width="fill_parent" that the attributes that refer to relative
android:layout_height="wrap_content" elements (e.g., layout_toLeft) refer to
android:background="#ffff0077"
the ID using the syntax of a relative
android:text="Type here:" />
resource (@+id/id).
<EditText android:id="@+id/entry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/label" />

Continue next page


26
4. Android – UI - User Interfaces

Common Layouts
<Button
android:id="@+id/ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content" RelativeLayout Example
android:layout_below="@+id/entry"
Cont.
android:layout_alignParentRight="true"
android:layout_marginLeft="10px"
android:text="OK" />

<Button
android:text="Cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/ok"
android:layout_alignTop="@+id/ok“ />

</RelativeLayout>

27
4. Android – UI - User Interfaces

Common Layouts
5. AbsoluteLayout
A layout that lets you specify exact locations (x/y coordinates) of its children.
Absolute layouts are less flexible and harder to maintain than other types of
layouts without absolute positioning.
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/myAbsoluteLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="[Link] >

<Button
android:id="@+id/myButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:layout_x=“120px"
android:layout_y=“32px"
>
</Button>
</AbsoluteLayout>
28
4. Android – UI - User Interfaces

A Detailed List of Widgets


For a detailed list consult:

[Link]
AbsListView DigitalClock PopupWindow [Link]
[Link] EditText ProgressBar TableRow
AbsoluteLayout ExpandableListView RadioButton [Link]
[Link] ExpandableListContextMenuInfo RadioGroup TabWidget
AbsSeekBar Filter [Link] TextSwitcher
AbsSpinner [Link] RatingBar TextView
AdapterView<T extends Adapter> FrameLayout RelativeLayout [Link]
AdapterContextMenuInfo [Link] [Link] TimePicker
AlphabetIndexer Gallery RemoteViews Toast
AnalogClock [Link] ResourceCursorAdapter ToggleButton
ArrayAdapter<T> GridView ResourceCursorTreeAdapter TwoLineListItem
AutoCompleteTextView HeaderViewListAdapter Scroller VideoView
BaseAdapter HorizontalScrollView ScrollView ViewAnimator
BaseExpandableListAdapter ImageButton SeekBar ViewFlipper
Button ImageSwitcher SimpleAdapter ViewSwitcher
CheckBox ImageView SimpleCursorAdapter ZoomButton
CheckedTextView LinearLayout SimpleCursorTreeAdapter ZoomControls
Chronometer [Link] SimpleExpandableListAdapter
CompoundButton ListView SlidingDrawer
CursorAdapter [Link] Spinner
CursorTreeAdapter MediaController TabHost
DatePicker MultiAutoCompleteTextView [Link]
DialerFilter CommaTokenizer TableLayout

29
4. Android – UI - User Interfaces

Attaching Layouts to Java Code


PLUMBING. You must ‘connect’ the XML elements with equivalent objects
in your Java activity. This allows you to manipulate the UI with code.
XLM Layout
<xml….
...
...
</xml>

JAVA code
pucbli class ….
{
...
...
}
30
4. Android – UI - User Interfaces

Attaching Layouts to Java Code


Assume the UI in res/layout/[Link] has been created. This layout could
be called by an application using the statement

setContentView([Link]);

Individual widgets, such as myButton could be accessed by the application


using the statement findViewByID(...) as in

Button btn = (Button) findViewById([Link]);

Where R is a class automatically generated to keep track of resources


available to the application. In particular [Link]... is the collection of widgets
defined in the XML layout.

31
4. Android – UI - User Interfaces

Attaching Layouts to Java Code


Attaching Listeners to the Widgets

The button of our example could now be used, for instance a listener
for the click event could be written as:

[Link](new OnClickListener() {
@Override
public void onClick(View v) {
updateTime();
}
});

private void updateTime() {


[Link](new Date().toString());
}

32
4. Android – UI - User Interfaces

Basic Widgets: Labels


• A label is called in android a
TextView.

• TextViews are typically used to


display a caption.

• TextViews are not editable,


therefore they take no input.

33
4. Android – UI - User Interfaces

Basic Widgets: Labels


<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/absLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="[Link]
>
<TextView
android:id="@+id/myTextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ff0000ff"
android:padding="3px"
android:text="Enter User Name"
android:textSize="16sp"
android:textStyle="bold"
android:gravity="center"
android:layout_x="20px"
android:layout_y="22px“ >
</TextView>

</AbsoluteLayout>
34
4. Android – UI - User Interfaces

Basic Widgets: Labels/TextViews


[Link]

Attribute Name Related Method Description


android:autoLink setAutoLinkMask(int) Controls whether links such as urls and email addresses are automatically found and
converted to clickable links.
android:autoText setKeyListener(KeyListener) If set, specifies that this TextView has a textual input method and automatically corrects
some common spelling errors.
android:bufferType setText(CharSequence,[Link]) Determines the minimum type that getText() will return.
android:capitalize setKeyListener(KeyListener) If set, specifies that this TextView has a textual input method and should automatically
capitalize what the user types.
android:cursorVisible setCursorVisible(boolean) Makes the cursor visible (the default) or invisible

Must be a boolean value, either "true" or "false".


android:digits setKeyListener(KeyListener) If set, specifies that this TextView has a numeric input method and that these specific
characters are the ones that it will accept.
android:drawableBottom setCompoundDrawablesWithIntrinsicBounds(Dra The drawable to be drawn below the text.
wable,Drawable,Drawable,Drawable)
android:drawableLeft setCompoundDrawablesWithIntrinsicBounds(Dra The drawable to be drawn to the left of the text.
wable,Drawable,Drawable,Drawable)
android:drawablePadding setCompoundDrawablePadding(int) The padding between the drawables and the text.
android:drawableRight setCompoundDrawablesWithIntrinsicBounds(Dra The drawable to be drawn to the right of the text.
wable,Drawable,Drawable,Drawable)
android:drawableTop setCompoundDrawablesWithIntrinsicBounds(Dra The drawable to be drawn above the text.
wable,Drawable,Drawable,Drawable)
android:editable If set, specifies that this TextView has an input method.
android:editorExtras setInputExtras(int) Reference to an <input-extras> XML resource containing additional data to supply to an
input method, which is private to the implementation of the input method.
android:ellipsize setEllipsize([Link]) If set, causes words that are longer than the view is wide to be ellipsized instead of broken
in the middle.
android:ems setEms(int) Makes the TextView be exactly this many ems wide
Must be an integer value, such as "100".
android:freezesText setFreezesText(boolean) If set, the text view will include its current complete text inside of its frozen icicle in addition
to meta-data such as the current cursor position.
35
4. Android – UI - User Interfaces

Basic Widgets: Labels/TextViews cont.


[Link]

Attribute Name Related Method Description


android:gravity setGravity(int) Specifies how to align the text by the view's x and/or y axis when the text is smaller than
the view.
android:height setHeight(int) Makes the TextView be exactly this many pixels tall.
android:hint setHint(int) Hint text to display when the text is empty.
android:imeActionId setImeActionLabel(CharSequence,int) Supply a value for [Link] used when an input method is connected to the text
view.
android:imeActionLabel setImeActionLabel(CharSequence,int) Supply a value for [Link] used when an input method is connected to the
text view.
android:imeOptions setImeOptions(int) Additional features you can enable in an IME associated with an editor, to improve the
integration with your application.
android:includeFontPadding setIncludeFontPadding(boolean) Leave enough room for ascenders and descenders instead of using the font ascent and
descent strictly.
android:inputMethod setKeyListener(KeyListener) If set, specifies that this TextView should use the specified input method (specified by fully-
qualified class name).
android:inputType setRawInputType(int) The type of data being placed in a text field, used to help an input method decide how to
let the user enter text.
android:lineSpacingExtra setLineSpacing(float,float) Extra spacing between lines of text.
android:lineSpacingMultiplier setLineSpacing(float,float) Extra spacing between lines of text, as a multiplier.
android:lines setLines(int) Makes the TextView be exactly this many lines tall
Must be an integer value, such as "100".
android:linksClickable setLinksClickable(boolean) If set to false, keeps the movement method from being set to the link movement method
even if autoLink causes links to be found.
android:marqueeRepeatLimit setMarqueeRepeatLimit(int) The number of times to repeat the marquee animation.
android:maxEms setMaxEms(int) Makes the TextView be at most this many ems wide
Must be an integer value, such as "100".
android:maxHeight setMaxHeight(int) Makes the TextView be at most this many pixels tall
Must be a dimension value, which is a floating point number appended with a unit such as
"14.5sp".
android:maxLength setFilters(InputFilter) Set an input filter to constrain the text length to the specified number.
android:maxLines setMaxLines(int) Makes the TextView be at most this many lines tall
Must be an integer value, such as "100".
36
4. Android – UI - User Interfaces

Basic Widgets: Labels/TextViews cont.


[Link]

Attribute Name Related Method Description


android:maxWidth setMaxWidth(int) Makes the TextView be at most this many pixels wide
Must be a dimension value, which is a floating point number appended with a unit such as
"14.5sp".
android:minEms setMinEms(int) Makes the TextView be at least this many ems wide
Must be an integer value, such as "100".
android:minHeight setMinHeight(int) Makes the TextView be at least this many pixels tall
Must be a dimension value, which is a floating point number appended with a unit such as
"14.5sp".
android:minLines setMinLines(int) Makes the TextView be at least this many lines tall
Must be an integer value, such as "100".
android:minWidth setMinWidth(int) Makes the TextView be at least this many pixels wide
Must be a dimension value, which is a floating point number appended with a unit such as
"14.5sp".
android:numeric setKeyListener(KeyListener) If set, specifies that this TextView has a numeric input method.
android:password setTransformationMethod(Transformation Whether the characters of the field are displayed as password dots instead of
Method) themselves.
android:phoneNumber setKeyListener(KeyListener) If set, specifies that this TextView has a phone number input method.
android:privateImeOptions setPrivateImeOptions(String) An addition content type description to supply to the input method attached to the text
view, which is private to the implementation of the input method.
android:scrollHorizontally setHorizontallyScrolling(boolean) Whether the text is allowed to be wider than the view (and therefore can be scrolled
horizontally).
android:selectAllOnFocus setSelectAllOnFocus(boolean) If the text is selectable, select it all when the view takes focus instead of moving the
cursor to the start or end.
android:shadowColor setShadowLayer(float,float,float,int) Place a shadow of the specified color behind the text.

android:shadowDx setShadowLayer(float,float,float,int) Horizontal offset of the shadow.

android:shadowDy setShadowLayer(float,float,float,int) Vertical offset of the shadow.

android:shadowRadius setShadowLayer(float,float,float,int) Radius of the shadow.

37
4. Android – UI - User Interfaces

Basic Widgets: Labels/TextViews cont.


[Link]

Attribute Name Related Method Description


android:singleLine setTransformationMethod(Transformatio Constrains the text to a single horizontally scrolling line instead of letting it wrap onto
nMethod) multiple lines, and advances focus instead of inserting a newline when you press the
enter key.
android:text setText(CharSequence) Text to display.
android:textColor setTextColor(ColorStateList) Text color.
android:textColorHighlight setHighlightColor(int) Color of the text selection highlight.
android:textColorHint setHintTextColor(int) Color of the hint text.
android:textColorLink setLinkTextColor(int) Text color for links.
android:textScaleX setTextScaleX(float) Sets the horizontal scaling factor for the text
Must be a floating point value, such as "1.2".
android:textSize setTextSize(float) Size of the text.
android:textStyle setTypeface(Typeface) Style (bold, italic, bolditalic) for the text.
android:typeface setTypeface(Typeface) Typeface (normal, sans, serif, monospace) for the text.
android:width setWidth(int) Makes the TextView be exactly this many pixels wide.

38
4. Android – UI - User Interfaces

Basic Widgets: Buttons


• A Button widget allows the simulation of a clicking action on a GUI.

• Button is a subclass of TextView. Therefore formatting a Button’s face


is similar to the setting of a TextView.
...
<Button
android:id="@+id/btnExitApp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10px"
android:layout_marginLeft="5px"
android:text="Exit Application"
android:textSize="16sp"
android:textStyle="bold"
android:gravity="center"
android:layout_gravity="center_horizontal"
>
</Button>
39
Your turn!

Implement any/all of the following projects using


simple text boxes (EditText, TextView) and buttons:

1. Currency calculator
2. Tip Calculator
3. Simple Flashlight

40
4. Android – UI - User Interfaces

Basic Widgets: Images


• ImageView and ImageButton are two Android widgets that allow
embedding of images in your applications.
• Both are image-based widgets analogue to TextView and Button,
respectively.
• Each widget takes an android:src or android:background
attribute (in an XML layout) to specify what picture to use.
• Pictures are usually reference a drawable resource.

• ImageButton, is a subclass of ImageView. It adds the standard


Button behavior for responding to click events.

41
4. Android – UI - User Interfaces

Basic Widgets: Images


...
<ImageButton
android:id="@+id/myImageBtn1"
android:src="@drawable/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</ImageButton>
<ImageView
android:id="@+id/myImageView1"
android:src="@drawable/microsoft_sunset"
android:layout_width="150px"
android:layout_height="120px"
android:scaleType="fitXY"
>
</ImageView>

42
4. Android – UI - User Interfaces

Basic Widgets: EditText


• The EditText (or textBox)
widget is an extension of
TextView that allows updates.

• The control configures itself to


be editable.

• Important Java methods are:


[Link](“someValue”)
and
[Link]().toString()

43
4. Android – UI - User Interfaces

Basic Widgets: EditText


In addition to the standard TextView properties EditText has many others
features such as:
• android:autoText, (true/false) provides automatic spelling assistance
• android:capitalize, (words/sentences) automatic capitalization
• android:digits, to configure the field to accept only certain digits
• android:singleLine, is the field for single-line / multiple-line input
• android:password, (true/false) controls field’s visibility
• android:numeric, (integer, decimal, signed) controls numeric format
• android:phonenumber, (true/false) Formatting phone numbers

44
4. Android – UI - User Interfaces

Basic Widgets: EditViews


Example

... Upper case words


<EditText
android:id="@+id/txtUserName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="18sp" Enter “teh”
android:autoText="true" It will be changed to: “The”
android:capitalize="words"
android:hint="First Last Name" Suggestion (grey)
>
</EditText>
...

45
4. Android – UI - User Interfaces

Basic Widgets: Example 1


In this little example we will use an AbsoluteLayout holding a
label( TexView), a textBox (EditText), and a Button.
We will use the view as a sort of simplified login screen.

Setting
Hint Capitals & text
spelling

A brief
message box

46
4. Android – UI - User Interfaces

Basic Widgets: Example 1


<?xml version="1.0" encoding="utf-8"?> <EditText
Application’s Layout: [Link]
<LinearLayout android:id="@+id/txtUserName"
android:id="@+id/linearLayout" android:layout_width="fill_parent"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_height="fill_parent" android:textSize="18sp"
android:background="#ffcccccc" android:autoText="true"
android:orientation="vertical" android:capitalize="words"
xmlns:android="[Link] android:hint="First Last Name"
android" >
> </EditText>

<TextView <Button
android:id="@+id/labelUserName" android:id="@+id/btnBegin"
android:layout_width="227px" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="#ff0000ff" android:text=" Begin Working "
android:padding="3px" android:textSize="14px"
android:text="Enter User Name" android:textStyle="bold"
android:textSize="16sp" >
android:textStyle="bold" </Button>
>
</TextView> </LinearLayout>

47
4. Android – UI - User Interfaces

Basic Widgets: Example 1


Android’s Application (1 of 2)
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
////////////////////////////////////////////////////////////////////////
// "LOGIN" - a gentle introduction to UI controls

public class AndDemo extends Activity {


TextView labelUserName;
EditText txtUserName;
Button btnBegin;

@Override
public void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link]);

//binding the UI's controls defined in "[Link]" to Java code


labelUserName = (TextView) findViewById([Link]);
txtUserName = (EditText) findViewById([Link]);
btnBegin = (Button) findViewById([Link]);
48
4. Android – UI - User Interfaces

Basic Widgets: Example 1


Android’s Application (2 of 2)
//LISTENER: wiring the button widget to events-&-code
[Link](new OnClickListener() {
@Override
public void onClick(View v) {
String userName = [Link]().toString();
if ([Link]("Maria Macarena")==0){
[Link]("OK, please wait...");
[Link](getApplicationContext(),
"Bienvenido " + userName,
Toast.LENGTH_SHORT).show();
}
[Link](getApplicationContext(),
"Bienvenido " + userName,
Toast.LENGTH_SHORT).show();
}

});// onClick

}//onCreate

}//class 49
4. Android – UI - User Interfaces

Basic Widgets: Example 1


Note:
Another way of defining a Listener for multiple button widgets
package [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link].*;

public class AndDemo extends Activity implements OnClickListener {


Button btnBegin;
Button btnExit;
@Override
public void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link]);

//binding the UI's controls defined in "[Link]" to Java code


btnBegin = (Button) findViewById([Link]);
btnExit = (Button) findViewById([Link]);

//LISTENER: wiring the button widget to events-&-code


[Link](this);
[Link](this);
}//onCreate

@Override
public void onClick(View v) {
if ([Link]()==[Link]() ){
[Link](getApplicationContext(), "1-Begin", 1).show();
}
if ([Link]()==[Link]() ){
[Link](getApplicationContext(), "2-Exit", 1).show();
}
}//onClick 50
}//class
4. Android – UI - User Interfaces

Basic Widgets: CheckBox


A checkbox is a specific type of two-states
button that can be either checked or
unchecked.

A example usage of a checkbox inside your


activity would be the following:

51
4. Android – UI - User Interfaces

Example 2: CheckBox
Complete code for the checkBox demo (1 of 3)
Layout: [Link]

<CheckBox
<?xml version="1.0" encoding="utf-8"?> android:id="@+id/chkCream"
<LinearLayout android:layout_width="wrap_content"
android:id="@+id/linearLayout" android:layout_height="wrap_content"
android:layout_width="fill_parent" android:text="Cream"
android:layout_height="fill_parent" android:textStyle="bold"
android:background="#ff666666" >
android:orientation="vertical" </CheckBox>
xmlns:android="[Link] <CheckBox
> android:id="@+id/chkSugar"
android:layout_width="wrap_content"
<TextView android:layout_height="wrap_content"
android:id="@+id/labelCoffee" android:text="Sugar"
android:layout_width="fill_parent" android:textStyle="bold"
android:layout_height="wrap_content" >
android:background="#ff993300" </CheckBox>
android:text="What else in you Coffee ?" <Button
android:textStyle="bold" android:id="@+id/btnPay"
> android:layout_width="153px"
</TextView> android:layout_height="wrap_content"
android:text="Pay"
android:textStyle="bold"
>
</Button>
</LinearLayout>

52
4. Android – UI - User Interfaces

Example 2: CheckBox
Complete code for the checkBox demo (2 of 3)
import [Link];
import [Link];
import [Link];
import [Link];

public class AndDemo extends Activity {


CheckBox chkCream;
CheckBox chkSugar;
Button btnPay;

@Override
public void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link]);
//binding XMl controls with Java code
chkCream = (CheckBox)findViewById([Link]);
chkSugar = (CheckBox)findViewById([Link]);
btnPay = (Button) findViewById([Link]);

53
4. Android – UI - User Interfaces

Example 2: CheckBox
Complete code for the checkBox demo (1 of 2)

//LISTENER: wiring button-events-&-code


[Link](new OnClickListener() {

@Override
public void onClick(View v) {
String msg = "Coffee ";
if ([Link]()) {
msg += " & cream ";
}
if ([Link]()){
msg += " & Sugar";
}
[Link](getApplicationContext(),
msg, Toast.LENGTH_SHORT).show();
//go now and compute cost...

}//onClick

});
}//onCreate
}//class

54
4. Android – UI - User Interfaces

Basic Widgets: RadioButtons


• A radio button is a two-states button that can be either checked or
unchecked.
• When the radio button is unchecked, the user can press or click it to
check it.
• Radio buttons are normally used together in a RadioGroup.

• When several radio buttons live inside a radio group, checking one radio
button unchecks all the others.
• RadioButton inherits from … TextView. Hence, all the standard TextView
properties for font face, style, color, etc. are available for controlling the
look of radio buttons.
• Similarly, you can call isChecked() on a RadioButton to see if it is
selected, toggle() to select it, and so on, like you can with a CheckBox.

55
4. Android – UI - User Interfaces

Basic Widgets: RadioButtons


Example
We extend the previous example by adding a RadioGroup and three
RadioButtons. Only new XML and Java code is shown:
<?xml version="1.0" encoding="utf-8"?> <RadioButton
<LinearLayout android:id="@+id/radDecaf"
android:id="@+id/myLinearLayout" android:layout_width="fill_parent"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_height="fill_parent" android:text="Decaf"
android:orientation="vertical" >
xmlns:android="[Link] </RadioButton>
> <RadioButton
android:id="@+id/radExpresso"
<RadioGroup android:layout_width="wrap_content"
android:id="@+id/radGroupCoffeeType" android:layout_height="wrap_content"
android:layout_width="fill_parent" android:text="Expresso"
android:layout_height="wrap_content" >
android:orientation="vertical" </RadioButton>
> <RadioButton
<TextView android:id="@+id/radColombian"
android:id="@+id/labelCoffeeType" android:layout_width="wrap_content"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_height="wrap_content" android:text="Colombian"
android:background="#ff993300" >
android:text="What type of coffee?" </RadioButton>
android:textStyle="bold" </RadioGroup>
>
</TextView> ...

</LinearLayout>
56
4. Android – UI - User Interfaces

Basic Widgets: RadioButtons


Android Activity (1 of 3)
package [Link];
// example using RadioButtons
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class AndDemoUI extends Activity {


CheckBox chkCream;
CheckBox chkSugar;
Button btnPay;
RadioGroup radCoffeeType;
RadioButton radDecaf;
RadioButton radExpresso;
RadioButton radColombian;
57
4. Android – UI - User Interfaces

Basic Widgets: RadioButtons


Android Activity (2 of 3)
@Override
public void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link]);
//binding XMl controls to Java code
chkCream = (CheckBox)findViewById([Link]);
chkSugar = (CheckBox)findViewById([Link]);
btnPay = (Button) findViewById([Link]);

radCoffeeType = (RadioGroup)findViewById([Link]);
radDecaf = (RadioButton)findViewById([Link]);
radExpresso = (RadioButton)findViewById([Link]);
radColombian = (RadioButton)findViewById([Link]);

58
4. Android – UI - User Interfaces

Basic Widgets: RadioButtons


//LISTENER: wiring button-events-&-code
[Link](new OnClickListener() {
@Override
public void onClick(View v) {
String msg = "Coffee ";
if ([Link]())
msg += " & cream ";

if ([Link]())
msg += " & Sugar";

// get radio buttons ID number


int radioId = [Link]();
// compare selected's Id with individual RadioButtons ID
if ([Link]()== radioId)
msg = “Colombian " + msg;
// similarly you may use .isChecked() on each RadioButton
if ([Link]())
msg = "Expresso " + msg;

[Link](getApplicationContext(), msg, Toast.LENGTH_SHORT).show();


// go now and compute cost...
}// onClick
});
}// onCreate
}// class 59
4. Android – UI - User Interfaces

Basic Widgets: RadioButtons


Example

This UI uses
RadioButtons RadioGroup
and
CheckBoxes
to define choices

Summary of choices

60
UI – Other Features
All widgets extend View therefore they acquire a number of useful View
properties and methods including:

XML Controls the focus sequence:


android:visibility
Android:background

Java methods
[Link]()
[Link]()
[Link]()
[Link]()

61
UI - User Interfaces

Questions ?

62
UI - User Interfaces
Resource: DroidDraw [Link]

63
Android Asset Studio – Beta (Accessed: 18-Jan-2011)
AAS Link: [Link]
Icon Gen [Link]
Pencil 1.2 [Link]
Video: [Link]

WARNING: These utilities are currently in beta.

Utilities that help in the design and development of Android application user interfaces. This library currently
consists of three individual tools for designers and developers:
1. UI Prototyping Stencils
A set of stencils for the Pencil GUI prototyping tool, which is available as an add-on for Firefox or as a
standalone download.
2. Android Asset Studio
Try out the beta version: Android Asset Studio (shortlink: [Link]
A web-based set of tools for generating graphics and other assets that would eventually be in an Android
application's res/ directory.
Currently available asset generators area available for:
Launcher icons
Menu icons
Tab icons
Notification icons
Support for creation of XML resources and nine-patches is planned for a future release.
3. Android Icon Templates
A set of Photoshop icon templates that follow the icon design guidelines, complementing the
official Android Icon Templates Pack.
64
Questions - Measuring Graphic Elements
Q. What is dpi ?
Stands for dots per inch. You can compute it using the following formula:
dpi = sqrt (width_pixels^2 + height_pixels^2) / diagonal_inches
G1 (base device 320x480) 155.92 dpi (3.7 in diagonally)
Nexus (480x800) 252.15 dpi

Q. What is my Emulator’s Screen Resolution?


When creating an AVD you could set the entry “Abstracted LCD density” parameter to anything. Its
default value is 160 dpi (use 260 for Nexus).

Q. How Android deals with screen resolutions?

Illustration of how the Android platform maps actual screen densities and sizes to generalized
density and size configurations.
65
Questions - Measuring Graphic Elements
Q. What do I gain by using screen densities?
More homogeneous results as shown below
Examples of density
independence on WVGA high
density (left), HVGA medium
density (center), and QVGA
low density (right).

Q. How to set different density/size screens in my application?


The following manifest fragments declares support for small, normal, large, and xlarge screens in
any density.

<manifest xmlns:android="[Link]
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true" />
...
</manifest> 66
Questions - Measuring Graphic Elements
Q. Give me an example on how to use dip units.
Assume you design your interface for a G1 phone having 320x480 pixels (Abstracted
LCD density is 160 – See your AVD entry)
You want a button to be hand-placed in the middle of the screen.
You could allocate the 320 horizontal pixels as [ 100 + 120 + 100 ]. The XML would be

<Button>
android:layout_height="wrap_content"
android:layout_width="120dip"
android:layout_x="100dip"
android:layout_y=“240dip"
android:text="Go"
android:id="@+id/btnGo"
</Button>

Instead of using pixels (px) you should use dip. If the application is deployed on a higher
resolution screen (more pixels in 1 dip) the button is still mapped to the middle of the
screen.

67

You might also like