Professional Documents
Culture Documents
App Development For Smart Devices: Lec #2: Activities, Intents, and User Interface
App Development For Smart Devices: Lec #2: Activities, Intents, and User Interface
App Development For Smart Devices: Lec #2: Activities, Intents, and User Interface
• Android Activities
• Android Intents
• User Interface / Views
• User Notifications
* http://developer.android.com/reference/android/app/Activity
// Called when the activity is first created. Provides you with a Bundle containing the
activity's previously frozen state, if there was one. Always followed by onStart().
// Called when the activity is becoming visible to the user. Followed by onResume() if the
activity comes to the foreground, or onStop() if it becomes hidden.
// Called after your activity has been stopped, prior to it being started again.
Always followed by onStart()
// Called when the activity will start interacting with the user. At this point your activity is at
the top of the activity stack, with user input going to it. Always followed by onPause().
// Called when the system is about to start resuming a previous
activity. Implementations of this method must be very quick because the next activity will
not be resumed until this method returns. Followed by either onResume() or onStop().
// Called when the activity is no longer visible to the user. Followed by either onRestart() if
this activity is coming back to interact with user, oronDestroy() if this activity is going away.
// The final call you receive before your activity is destroyed. This can happen either
because the activity is finishing (someone called finish() on it, or because the system is
temporarily destroying this instance of the activity to save space. You can distinguish
between these two scenarios with the isFinishing() method.
Foreground Lifetime
Visible Lifetime
Entire Lifetime
• Turn Display
> onCreate(null) -> onStart -> onResume() -> [Turn Display]
> onSaveInstanceState() -> onPause() -> onStop() -> onDestroy()
-> onCreate() -> onStart() -> onRestoreInstanceState() -> onResume()
• Home
> onCreate(null) -> onStart -> onResume() -> [Home Button]
> onSaveInstanceState() -> onPause() -> onStop() -> [Start App]
> onRestart() -> onStart() -> onResume()
Multiple Activity
Instances
Multiple Tasks
Page 17 Fall 2013 CS 495/595 - App Development for Smart Devices
Activities and AndroidManifest.xml
• Any new activity must be defined in AndroidManifest.xml file
* http://developer.android.com/reference/android/content/Intent.html
Note that Actions’ “Constant” could be replaced with an equivalent String constant.
e.g.,: ACTION_CALL = "android.intent.action.CALL"
http://developer.android.com/guide/topics/intents/intents-filters.html
Page 26 Fall 2013 CS 495/595 - App Development for Smart Devices
.MAIN Action & .LAUNCHER Category
• Activities that can initiate applications have filters with
"android.intent.action.MAIN" specified as the action
• This is a way an application gets started fresh, without a reference to any particular
data.
• The Android system populates the application launcher by finding all the
activities with intent filters that specify the "android.intent.action.MAIN"
action and "android.intent.category.LAUNCHER” category. It then
displays the icons and labels of those activities in the launcher.
* http://developer.android.com/guide/topics/ui/index.html
* http://developer.android.com/guide/topics/resources/overview.html
Page 30 Fall 2013 CS 495/595 - App Development for Smart Devices
Fundamental UI Design
• Views
– Visual interface element (controls or widgets)
• ViewGroup
– Contains multiple widgets. Layouts inherit the ViewGroup class
• Activities
– Screen being displayed to the user.
Assign a View or layout to an Activity
* http://developer.android.com/guide/topics/ui/declaring-layout.html
Page 32 Fall 2013 CS 495/595 - App Development for Smart Devices
Layouts Examples
• Portrait mode:
– res/layout/main.xml
• Landscape mode:
– res/layout-land/main.xml
<TableRow>
<TextView android:text="E-mail:" android:width="120px" />
<EditText android:id="@+id/email" android:width="200px" />
</TableRow>
<TableRow>
<TextView android:text="Password:" />
<EditText android:id="@+id/password" android:password="true" />
</TableRow>
<TableRow>
<TextView />
<CheckBox android:id="@+id/rememberMe" android:text="Remember Me" />
</TableRow>
<TableRow>
<Button android:id="@+id/signIn" android:text="Log In" android:layout_span="2" />
</TableRow>
</TableLayout>
Page 38 Fall 2013 CS 495/595 - App Development for Smart Devices
Defining Styles
• Multiple Buttons
• Define style only once!
...
<TableRow android:id="@+id/TableRow01"
android:layout_weight="0.2"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button android:id="@+id/Button07"
style="@style/mybutton" android:text="7" />
<Button android:id="@+id/Button08"
style="@style/mybutton" android:text="8" />
<Button android:id="@+id/Button09"
style="@style/mybutton" android:text="9" />
<Button android:id="@+id/ButtonDivide"
style="@style/mybutton" android:text="/" />
</TableRow>
...
Page 39 Fall 2013 CS 495/595 - App Development for Smart Devices
Styles in values/styles.xml
• TextView
– Label
• EditText
– Editable text
• Button
– Standard push button
• CheckBox
– Standard checkbox
• RadioButton
– Standard radio button
• ListView
– View group that manages a group of Views.
• Spinner
– TextView associated with ListView. Let's you select an item from a list.
• Package android.widget
http://developer.android.com/reference/android/widget/package-
summary.html
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepaerOptionsMenu(menu);
MenuItem menuItem1 = menu.findItem(R.id.new_game);
menuItem1.setEnabled(false);
MenuItem menuItem2 = menu.getItem(0);
menuItem2.setEnabled(false);
return true;
}
@Override
public void onCreate(Bundle savedInstanceState) {
…
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
…
}
@Override
public boolean onContextItemSelected(MenuItem item) {
…
}
}
Page 55 Fall 2013 CS 495/595 - App Development for Smart Devices
OnCreate
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv = new TextView(this);
tv.setText("Context Menu!");
registerForContextMenu(tv);
//or
//tv.setOnCreatContextMenuListener(this);
setContentView(tv);
}
if (v == tv) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mymenu, menu);
}
}
switch (item.getItemId()) {
case R.id.a:
Toast.makeText(this, "A", 1000).show();
return true;
case R.id.b:
Toast.makeText(this, "B", 1000).show();
return true;
}
return false;
}
• Dialog Notification
– Activity-related notification
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(ref);
Notification notification =
new Notification(R.drawable.notify_icon,
"Hello",
System.currentTimeMillis());
mNotificationManager.notify(1, notification);
mNotificationManager.notify(1, notification);
http://developer.android.com/guide/topics/ui/notifiers/notifications.html
Page 68 Fall 2013 CS 495/595 - App Development for Smart Devices
Dialogs
• AlertDialog
• ProgressDialog
• DatePickerDialog
• TimePickerDialog
http://developer.android.com/guide/topics/ui/dialogs.html
Page 70 Fall 2013 CS 495/595 - App Development for Smart Devices
Example of Progress Dialog
* http://developer.android.com/tools/debugging/debugging-log.html
Page 73 Fall 2013 CS 495/595 - App Development for Smart Devices
Debug (Window > Open Perspective > Debug)
• DroidDraw: http://www.droiddraw.org/
• Video:
http://marakana.com/forums/android/general/212.html