mobile programming lecture 2 layouts, widgets, toasts, and event handling

92
Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Upload: lisa-morgan

Post on 27-Dec-2015

235 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Mobile ProgrammingLecture 2

Layouts, Widgets, Toasts, and Event Handling

Page 2: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Lecture 1 Review

• How to edit XML files in Eclipse?

• What holds all elements (Views) that appear to the user in an Activity?

• When should you make changes to R.java?

• Give an example of a View (something in Android that extends View)

• How to add a new XML Layout file?

Page 4: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - Finding available Widgets

• To see some of the available Widgets, open one of the XML files in res/layout

• View the XML file as Graphical Layout using the tabs at the bottom of the window

• Select a category in the left pane if necessary (e.g. Form Widgets)

Page 5: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets

• All of these widgets are subclasses of the View class (i.e., View is the base class for widgets)

• Try to avoid modifying XML files directly if you cano use Forms or WYSIWYG "wizzy wig" instead

Page 6: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - Examples

• TextViewso displays text in your Activity

• EditTexto allows the user to enter some text

• Buttono Can be pressed by the user to perform an actiono CheckBoxo RadioGroupo ToggleButton

Page 7: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - id's

• Id's are not required for each widget

• R.java stores the id's for your widgets. How does the id's set and get?o Remember, don't edit the R.java file!

Page 8: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - id's

• 2 ways to add a widget and set its android:id value

• Using the Graphical Layout editoro Drag and drop a widget onto the canvaso Right click on the widget and select "Edit ID..."

• Using the XML editoro type the XML code needed for the widget that you

wanto add android:id="@+id/id_name“ to its attributes

Page 9: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - id's

Save your file, and the id will automatically be added R.java

• android:id="@+id/id_name"o @ tells the XML parser to expand the rest of the id

string and treat it as an ID resourceo + is what causes the id to be added to R.java

Page 10: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets

As you may have noticed, you can do this for attributes other than the android:id attribute

You can explore your options by right clicking on anything on the canvas

Page 11: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - layout_height/width

Always set the android:layout_height and android:layout_width attributes in the XML file for your widgets.

• NOT doing so is an easy way to get Force close

• Drag and drop onto the canvas so that you don't have to worry about this

Page 12: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - layout_height/width

Values for android:layout_height and android:layout_width

• "wrap_content"o big enough to hold it's contents

• "match_parent"o make the specified dimension as big as its parent

• "fill_parent"o being deprecated, replaced by "match_parent"

Page 13: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - TextView

We will experiment with some of the attributes for the TextView widget

• android:texto e.g. "Hello World!"

• android:textSizeo e.g. "20dp"o android:textSize should be specified in dp (density-pixels), so that

phones with different pixels-per-inch can be supported

• android:textStyleo e.g. "italic"

• android:textColoro e.g. #FFFFFF

Page 14: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - EditText

Experimenting with the EditText widget. EditText is a subclass of TextView.

• android:hinto e.g. "Enter your name"

• android:inputTypeo textCapWordso textMultiLineo textPasswordo textNumber

• android:gravityo e.g. "right”, “center_vertical”, “top”

Page 15: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - Gravity

• Android:gravity sets the gravity of the content of the View its used on.

• Android:layout_gravity sets the gravity of the View or Layout in its parent.

Page 16: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - Button

Experimenting with the Button widget. Button is a subclass of TextView.

• android:inputType

• android:gravity

Page 17: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - CheckBox

Experimenting with the CheckBox widget. CheckBox is a subclass of Button

• android:texto e.g. "I agree to the terms and conditions"

• android:checkedo "true" or "false"o sets the default value of the CheckBox

Page 18: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - RadioGroup / RadioButton

• You usually want to drag a RadioGroup onto the canvas first

• It's easy to drag and drop or remove RadioButtons to the RadioGroup

Page 19: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - RadioButton

Experimenting with the RadioButton widget. RadioButton is a subclass of Button

• android:texto e.g. "Female"

• android:checkedo "true" or "false"o sets the default value of the RadioButton

Page 20: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - ToggleButton

Experimenting with the ToggleButton widget. ToggleButton is a subclass of Button

• android:textOno e.g. "GPS Enabled"o default value is "On"

• android:textOffo e.g. "GPS Disabled"o default value is "Off"

• android:checkedo "true" or "false"o sets the default value of the ToggleButton

Page 21: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - SeekBar

Experimenting with the SeekBar widget. • android:max

o e.g. "100"o you can't set the min, it's always 0

• android:progresso e.g. "50"o sets the current position of the slider on the SeekBar

Page 22: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - RatingBar

Experimenting with the RatingBar widget. • android:numStars

o e.g. "6"• android:rating

o e.g. "3"o sets the default rating

• android:stepSizeo e.g. "2"o rating is set in groups of stepSizeo default = "1"

Page 23: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts

You can add multiple Layouts to the canvas!

Page 24: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts

• LinearLayout

• RelativeLayout

• TableLayout

Page 25: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - LinearLayout Review

Only allows you to arrange widgets in a linear direction

• horizontally or vertically

• sometimes this is all you need!

Page 26: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - LinearLayout (Vertical)

A

Page 27: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - LinearLayout (Vertical)

AB

Page 28: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - LinearLayout (Vertical)

ABC

Page 29: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - LinearLayout (Vertical)

ABCD

Page 30: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - LinearLayout (Vertical)

ABCDE

Page 31: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - LinearLayout

• Nesting LinearLayouts can degrade performance

• http://developer.android.com/training/improving-layouts/optimizing-layout.html

• For your homeworks and projects, only use LinearLayout when you have good reason to do so

Page 32: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts

• Try not to waste too much time on editing the Layout in the XML editor

• If you want to switch from LinearLayout to another Layouto Right click canvaso Change Layout...o Select a different Layout

Page 33: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts

• Want to add an entirely new UI?

• Right click your project > New > Android XML Fileo Resource Type: Layouto File: xml_file_name.xmlo Root Element: e.g. RelativeLayouto This stores the new XML file in res/layout

Page 34: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

• Allows you to specify the position of one view B relative to another view A

Layouts - RelativeLayout

Page 35: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - RelativeLayout

A

Page 36: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - RelativeLayout

AB

Page 37: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - RelativeLayout

A B

Page 38: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - RelativeLayout

BA

Page 39: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - RelativeLayout

B A

Page 40: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - RelativeLayout

A

B

Many possibilities! Unlike LinearLayout

Page 41: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - RelativeLayout

A

BMany possibilities! Unlike

LinearLayout

Page 42: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - RelativeLayout

A

B

Many possibilities! Unlike LinearLayout

Page 43: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - RelativeLayout

• Many more possibilities for arranging your widgets, unlike LinearLayout.

• RelativeLayout > LinearLayout

• http://developer.android.com/guide/topics/ui/layout/relative.html

Page 44: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - TableLayout

• Displays widgets in rows and columns similar to HTML tables

• Your TableLayout usually consists of TableRows, which lay their children out horizontally

• layout_width attribute of TableLayout's children are forced to be match_parent (even if you set it yourself)

• Likewise, layout_height of a TableRow is forced to be wrap_content

Page 45: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - TableLayout

AD

BTableRow

TableRow

C

TableRow

Page 46: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - Oversized Layouts

• If you have some widgets that aren't being displayed on the screen, it could be because there isn't enough space on the screen to show them all

• You won't be able to scroll by default

Page 47: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Layouts - ScrollView

To solve this:

• Add a ScrollView view to the root of your root layout (can be LinearLayout)

• Move your main Layout to root of the ScrollView (e.g. RelativeLayout)

Page 48: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Toast

• Finally, Java code

• Before looking at Toasts ... let's look the autogenerated Java code.

public class HelloWorldActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

}

Page 49: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Toast

• Finally, Java code

• Before looking at Toasts ... let's look the autogenerated Java code.

public class HelloWorldActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

}

Main point of entry into your code. Called when the Activity is created.

Page 50: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Toast

• Finally, Java code

• Before looking at Toasts ... let's look the autogenerated Java code.

public class HelloWorldActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

}

Android needs to do who knows what before you can do anything.

Page 51: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Toast

• Finally, Java code

• Before looking at Toasts ... let's look the autogenerated Java code.

public class HelloWorldActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

}

Set the layout that you want to use. This one corresponds to res/layout/main.xml

Page 52: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Toast

• A notification message that pops up on the screen for a few seconds

• Add this to your code:

Toast.makeText(this, "Message", Toast.LENGTH_SHORT).show();

Page 53: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Toast

• There are several reasons why your Toast won't show up on the screen

• One reason is that you probably forgot the .show() part of the Toast code.

Page 54: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Events - Event driven programming

• Android is event-driven

• The flow of code depends on events, unlike programs you normally write in C++

• If you've written JavaScript code before then you've probably done event-driven programming

Page 55: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Events - examples events

• Call a method when the usero clicks a buttono checks a checkboxo pulls back on and lets go of slingshot in Angry Birds

• Call a method when the systemo receives an SMSo receives a phone callo completely loads a web page in the browser

Page 56: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Events - View

• Every View can react to the onClick event

• Layouts are also Views!

Page 57: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

• Let's react to a Button click event.

• Add a button to the canvas, and add the code in bold below to the button

<Button

android:text="Submit"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="myEventHandler" />

Events - Button Click

Page 58: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

• Let's react to a Button click event.

• Add a button to the canvas, and add the code in bold below to the button

<Button

android:text="Submit"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="myEventHandler" />

Events - Button Click

This says to launch the myEvent method when this button is clicked

Page 59: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

• Let's react to a Button click event.

• Add the method below to your Java codepublic void myEventHandler(View v)

{

Toast.makeText(

this, "You pressed a button!", Toast.LENGTH_LONG).show();

}

Events - Button Click

Page 60: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

• Let's react to a Button click event.

• Add the method below to your Java code

public void myEventHandler(View v)

{

Toast.makeText(

this, "You pressed a button!",

Toast.LENGTH_LONG).show();

}

Events - Button Click

Name of the method must match the android:onClick attribute in the XML file

Page 61: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

• Let's react to a Button click event.

• Add the method below to your Java code

public void myEventHandler(View v)

{

Toast.makeText(

this, "You pressed a button!",

Toast.LENGTH_LONG).show();

}

Events - Button Click

Has to be public to be able to work. private may give you a Force close.

Page 62: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

• Let's react to a Button click event.

• Add the method below to your Java code

public void myEventHandler(View v)

{

Toast.makeText(

this, "You pressed a button!",

Toast.LENGTH_LONG).show();

}

Events - Button Click

void for onClick. Not all event-handlers should return void, however. We'll see this soon

Page 63: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

• Let's react to a Button click event.

• Add the method below to your Java code

public void myEventHandler(View v)

{

Toast.makeText(

this, "You pressed a button!",

Toast.LENGTH_LONG).show();

}

Events - Button Click

View parameter is required. You may use myEventHandler to handle multiple events.

Page 64: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

• Let's react to a Button click event.

• Add the method below to your Java code

public void myEventHandler(View v)

{

Toast.makeText(

this, "You pressed a button!",

Toast.LENGTH_LONG).show();

}

Events - Button Click

How do you know which view has been clicked?

Page 65: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

• So far we've done most of our development using XML. Now we're going to really start looking at Java code.

• We need to be able to reference our views (specified in the XML file) using Java

In the Graphical Layout, right click the Button and choose Edit Id...

o set the ID to "submitButton"

Events - How do we know which view has been clicked?

Page 66: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

• Add an EditText to the canvas

• Set the ID to "firstname"

• Set android:onClick="myEventHandler"

Events - How do we know which view has been clicked?

Page 67: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

public class HelloWorldActivity extends Activity {

Button mSubmitButton;

EditText mFirstName;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button mSubmitButton = (Button) findViewById(R.id.submitButton);

EditText mFirstName = (EditText) findViewById(R.id.firstName);

}

}

Events - How do we know which view has been clicked?

Page 68: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

public class HelloWorldActivity extends Activity {

Button mSubmitButton;

EditText mFirstName;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button mSubmitButton = (Button) findViewById(R.id.submitButton);

EditText mFirstName = (EditText) findViewById(R.id.firstName);

}

}

Events - How do we know which view has been clicked?

Add local fields for the corresponding widgets to reference them later

Page 69: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

public class HelloWorldActivity extends Activity {

Button mSubmitButton;

EditText mFirstName;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button mSubmitButton = (Button) findViewById(R.id.submitButton);

EditText mFirstName = (EditText) findViewById(R.id.firstName);

}

}

Events - How do we know which view has been clicked?

Set the widgets. Remember we set the unique IDs for these widgets previously.

Page 70: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

public class HelloWorldActivity extends Activity {

Button mSubmitButton;

EditText mFirstName;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button mSubmitButton = (Button) findViewById(R.id.submitButton);

EditText mFirstName = (EditText) findViewById(R.id.firstName);

}

}

Events - How do we know which view has been clicked?

Cast it to the correct View subclass, since findViewById returns a View.

Page 71: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

public class HelloWorldActivity extends Activity {

Button mSubmitButton;

EditText mFirstName;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button mSubmitButton = (Button) findViewById(R.id.submitButton);

EditText mFirstName = (EditText) findViewById(R.id.firstName);

}

}

Events - How do we know which view has been clicked?

Now that you can reference the views in Java, take a look at the method for the views

Page 72: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

public class HelloWorldActivity extends Activity {

Button mSubmitButton;

EditText mFirstName;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button mSubmitButton = (Button) findViewById(R.id.submitButton);

EditText mFirstName = (EditText) findViewById(R.id.firstName);

}

}

Events - How do we know which view has been clicked?

e.g. mSubmitButton.setText("submit");mSubmitButton.getText();This is important!

Page 73: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

public void myEventHandler(View v)

{

Toast.makeText(

this, "You pressed a button!", Toast.LENGTH_LONG).show();

}

Events - How do we know which view has been clicked?

How do you know which view has been clicked?

Page 74: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

public void myEventHandler(View v)

{

if(v == mSubmitButton) { /* submitButton clicked */ }

else if(v == mFirstName) { /* first name clicked */ }

}

Events - How do we know which view has been clicked?

Page 75: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

public void myEventHandler(View v)

{

if(v == mSubmitButton) { /* submitButton clicked */ }

else if(v == mFirstName) { /* first name clicked */ }

}

Events - How do we know which view has been clicked?

Add this method to your class

Page 76: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

You can also create a different method to handle events for different views if you want to.

Events

Page 77: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Events - Handling Events

There are 3 ways to incorporate EventListeners:

1. Specify the name of the method to handle the event in XML. We just did this.

2. Have your Activity implement an EventListener

3. Create an anonymous implementation of the EventListener

Page 78: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Events - Handling Events

There are 3 ways to incorporate EventListeners:

1. Specify the name of the method to handle the event in XML. We just did this.

2. Have your Activity implement an EventListener

3. Create an anonymous implementation of the EventListener

Page 79: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Events - Implement EventListener

public class HelloWorldActivity extends Activity{

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button mSubmitButton = (Button) findViewById(R.id.submitButton);

EditText mFirstName = (EditText) findViewById(R.id.firstName);

}

}

You should remove the android:onClick attribute from the submitButton in the XML file

Page 80: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Events - Implement EventListener

public class HelloWorldActivity extends Activity implements OnClickListener {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button mSubmitButton = (Button) findViewById(R.id.submitButton);

EditText mFirstName = (EditText) findViewById(R.id.firstName);

mSubmitButton.setOnClickListener(this);

}

public void onClick(View v) {

...

}

}

Page 81: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Events - Implement EventListener

public class HelloWorldActivity extends Activity implements OnClickListener {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button mSubmitButton = (Button) findViewById(R.id.submitButton);

EditText mFirstName = (EditText) findViewById(R.id.firstName);

mSubmitButton.setOnClickListener(this);

}

public void onClick(View v) {

...

}

}

What if I remove this? Try it.

Page 82: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Events - Handling Events

There are 3 ways to incorporate EventListeners:

1. Specify the name of the method to handle the event in XML. We just did this.

2. Have your Activity implement an EventListener

3. Create an anonymous implementation of the EventListener

Page 83: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Events - Anonymous Listener

public class HelloWorldActivity extends Activity{

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button mSubmitButton = (Button) findViewById(R.id.submitButton);

EditText mFirstName = (EditText) findViewById(R.id.firstName);

}

Page 84: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Events - Anonymous Listener

public class HelloWorldActivity extends Activity{

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button mSubmitButton = (Button) findViewById(R.id.submitButton);

EditText mFirstName = (EditText) findViewById(R.id.firstName);

}

Doesn't need to implement OnClickListener this time!

Page 85: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Events - Anonymous Listener

public class HelloWorldActivity extends Activity{

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button mSubmitButton = (Button) findViewById(R.id.submitButton);

EditText mFirstName = (EditText) findViewById(R.id.firstName);

mSubmitButton.setOnClickListener( new OnClickListener() {

public void onClick(View v) {

/* submitButton clicked */

}

});

}

}

Page 86: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Events - Anonymous Listener

A fast way to set the onClickListener:

after typing “mSubmitButton.” (including the dot)choose the “setOnClickListener” method from the list1. in the parentheses, type “new “ (including the whitespace)2. press Ctrl+Spacebar3. select View.OnClickListener from the list4. You may have to press Ctrl + o to import any missing packages5. add a semicolon at the end of the autogenerated code6. add your code to the auto-generated methods

Page 87: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - NumberPicker

• NumberPicker is in HoneyComb or later (Android 3.0)

• You may get Force close if you try to manipulate it in an earlier version

Page 88: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - NumberPicker

For some reason, it doesn't seem like NumberPicker attributes can be set in XML ...

Page 89: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets - NumberPicker

After adding NumberPicker with android:id="@+id/agePicker" to the XML file

NumberPicker mAgePicker;

public class HelloWorldActivity extends Activity{

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mAgePicker = (NumberPicker) findViewById(R.id.agePicker);

mAgePicker.setMaxValue(120);

mAgePicker.setMinValue(5);

}

Page 90: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Widgets

Most of a widget's XML attributes can be set and get programmatically

Example widget XML attribute set method get method

EditText android:text setText(String) getText()

Button android:onClicksetOnClickListener(On

ClickListener)-

CheckBox android:checked setChecked() isChecked()

SeekBar android:progress setProgress() getProgress()

SeekBar android:max setmax() getMax()

Page 91: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

Homework 2

• Homework 2 is posted on my website: http://ww2.cs.fsu.edu/~tian/mobileProgramming.php

• It is due on May 24th, next Friday, in class.

• Please just demo to me.

Page 92: Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling

References

• The Busy Coder's Guide to Android Development - Mark Murphy

• Android Developers

• The Mobile Lab at Florida State University