Android Alert Dialog
Some times in your
application , if you wanted to ask the user about taking a decision between yes
or no in response of any particular action taken by the user, by remaining in
the same activity and without changing the screen, you can use Alert Dialog.
In order to make an alert dialog, you need to make an object of
AlertDialogBuilder which an inner class of AlertDialog. Its syntax is given
below
AlertDialog.Builder
alertDialogBuilder = new AlertDialog.Builder(this);
|
Now you have to set the
positive (yes) or negative (no) button using the object of the
AlertDialogBuilder class. Its syntax is
alertDialogBuilder.setPositiveButton(CharSequence
text, DialogInterface.OnClickListener listener)
alertDialogBuilder.setNegativeButton(CharSequence text,
DialogInterface.OnClickListener listener)
|
Apart from this, you can
use other functions provided by the builder class to customize the alert
dialog. These are listed below
Sr.No
|
Method type & description
|
1
|
setIcon(Drawable icon)
This method set the icon of the alert dialog box.
|
2
|
setCancelable(boolean
cancelable)
This method sets the property that the dialog can be cancelled or not
|
3
|
setMessage(CharSequence
message)
This method sets the message to be displayed in the alert dialog
|
4
|
setMultiChoiceItems(CharSequence[]
items, boolean[] checkedItems, DialogInterface.OnMultiChoiceClickListener
listener)
This method sets list of items to be displayed in the dialog as the content.
The selected option will be notified by the listener
|
5
|
setOnCancelListener(DialogInterface.OnCancelListener
onCancelListener)
This method Sets the callback that will be called if the dialog is canceled.
|
6
|
setTitle(CharSequence
title)
This method set the title to be appear in the dialog
|
After creating and setting
the dialog builder, you will create an alert dialog by calling the create()
method of the builder class. Its syntax is
AlertDialog alertDialog =
alertDialogBuilder.create();
alertDialog.show();
|
This will create the alert
dialog and will show it on the screen.
Example:
The following example demonstrates the use of AlertDialog in android. It uses
three different activities to demonstrate it. The dialog asks you to jump to
positive activity or negative activity or cancel it.
To experiment with this example, you need to run this on an emulator or an
actual device.
Steps
|
Description
|
1
|
You will use Eclipse IDE
to create an Android application and name it as AlertDialog under a package
com.example.alertdialog. While creating this project, make sure you Target
SDK and Compile With at the latest version of Android SDK to use higher
levels of APIs.
|
2
|
Modify
src/MainActivity.java file to add alert dialog code to launch the dialog.
|
3
|
Modify layout XML file
res/layout/activity_main.xml add any GUI component if required.
|
4
|
Create a new activity
called PositiveActivity and confim it by visiting src/PositiveActivity.java.
|
5
|
Modify layout XML file of
the newly created activity res/layout/activity_positive.xml add any GUI
component if required.
|
6
|
Create a new activity
called NegativeActivity and confim it by visiting src/NegativeActivity.java.
|
7
|
Modify layout XML file of
the newly created activity res/layout/activity_negative.xml add any GUI
component if required.
|
8
|
Modify
res/values/strings.xml to define required constant values
|
9
|
Run the application and
choose a running android device and install the application on it and verify
the results.
|
Here is the modified code
of src/com.example.alertdialog/MainActivity.java
package
com.example.alertdialog;
import com.example.alertdialog.*;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.Menu;
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void open(View view)
{
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage(R.string.decision);
alertDialogBuilder.setPositiveButton(R.string.positive_button,
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface arg0, int arg1)
{
Intent positveActivity = new Intent(getApplicationContext(),com.example.alertdialog.PositiveActivity.class);
startActivity(positveActivity);
}
});
alertDialogBuilder.setNegativeButton(R.string.negative_button,
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
Intent negativeActivity = new
Intent(getApplicationContext(),com.example.alertdialog.NegativeActivity.class);
startActivity(negativeActivity);
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
|
Here is the default code of
src/com.example.alertdialog/PositiveActivity.java
package
com.example.alertdialog;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class PositiveActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_positive);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.positive, menu);
return true;
}
}
|
Here is the default code of
src/com.example.alertdialog/NegativeActivity.java
package
com.example.alertdialog;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class NegativeActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_negative);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.negative, menu);
return true;
}
}
|
Here is the modified code
of res / layout / activity _ main.xml
< RelativeLayout
xmlns:android= " http: / / schemas.android.com / apk / res / android
"
xmlns:tools= " http: / / schemas.android.com / tools "
android:layout _ width= " match _ parent "
android:layout _ height= " match _ parent "
android:paddingBottom= " @dimen / activity _ vertical _ margin "
android:paddingLeft= " @dimen / activity _ horizontal _ margin "
android:paddingRight= " @dimen / activity _ horizontal _ margin "
android:paddingTop= " @dimen / activity _ vertical _ margin "
tools:context= " .MainActivity " >
< Button android:id= " @+id / button1 "
android:layout _ width= " wrap _ content "
android:layout _ height= " wrap _ content "
android:layout _ alignParentTop= " true "
android:layout _ centerHorizontal= " true "
android:layout _ marginTop= " 170dp "
android:onClick= " open "
android:text= " @string / hello _ world " / >
< / RelativeLayout >
|
Here is the modified code
of res / layout / activity _ positive.xml
< RelativeLayout
xmlns:android= " http: / / schemas.android.com / apk / res / android
"
xmlns:tools= " http: / / schemas.android.com / tools "
android:layout _ width= " match _ parent "
android:layout _ height= " match _ parent "
android:paddingBottom= " @dimen / activity _ vertical _ margin "
android:paddingLeft= " @dimen / activity _ horizontal _ margin "
android:paddingRight= " @dimen / activity _ horizontal _ margin "
android:paddingTop= " @dimen / activity _ vertical _ margin "
tools:context= " .PositiveActivity " >
< TextView android:id= " @+id / textView1 "
android:layout _ width= " wrap _ content "
android:layout _ height= " wrap _ content "
android:layout _ alignParentLeft= " true "
android:layout _ alignParentTop= " true "
android:layout _ marginLeft= " 14dp "
android:layout _ marginTop= " 20dp "
android:text= " @string / positive "
android:textAppearance= " ?android:attr / textAppearanceLarge " /
>
< / RelativeLayout >
|
Here is the modified code
of res / layout / activity _ negative.xml
< RelativeLayout
xmlns:android= " http: / / schemas.android.com / apk / res / android
"
xmlns:tools= " http: / / schemas.android.com / tools "
android:layout _ width= " match _ parent "
android:layout _ height= " match _ parent "
android:paddingBottom= " @dimen / activity _ vertical _ margin "
android:paddingLeft= " @dimen / activity _ horizontal _ margin "
android:paddingRight= " @dimen / activity _ horizontal _ margin "
android:paddingTop= " @dimen / activity _ vertical _ margin "
tools:context= " .NegativeActivity " >
< TextView android:id= " @ + id / textView1 "
android:layout _ width= " wrap _ content "
android:layout _ height= " wrap _ content "
android:layout _ alignParentLeft= " true "
android:layout _ alignParentTop= " true "
android:layout _ marginLeft= " 14dp "
android:layout _ marginTop= " 17dp "
android:text= " @string / negative "
android:textAppearance= " ?android:attr / textAppearanceLarge " /
>
< / RelativeLayout >
|
Here is the modified code
ofStrings.xml
< ?xml version= "
1.0 " encoding= " utf-8 " ? >
< resources >
< string name= " app _ name " > AlertDialog < / string
>
< string name= " action _ settings " > Settings < / string
>
< string name= " hello _ world " > Hello world! < / string
>
< string name= " title _ activity _ positive " >
PositiveActivity < / string >
< string name= " title _ activity _ negative " >
NegativeActivity < / string >
< string name= " positive " > Positive Activity < / string
>
< string name= " negative " > Negative Activity < / string
>
< string name= " decision " > Are you sure, you wanted to
make this decision < / string >
< string name= " positive _ button " > + ive < / string
>
< string name= " negative _ button " > -ive < / string
>
< / resources >
|
Here is the default code of
AndroidManifest.xml
< ?xml version= "
1.0 " encoding= " utf-8 " ? > < manifest xmlns:android=
" http: / / schemas.android.com / apk / res / android "
package= " com.example.alertdialog "
android:versionCode= " 1 "
android:versionName= " 1.0 " >
< uses-sdk android:minSdkVersion= " 8 "
android:targetSdkVersion= " 17 " / >
< application android:allowBackup= " true "
android:icon= " @drawable / ic _ launcher "
android:label= " @string / app _ name "
android:theme= " @style / AppTheme " >
< activity android:name= " com.example.alertdialog.MainActivity
"
android:label= " @string / app _ name " >
< intent-filter >
< action android:name= " android.intent.action.MAIN " / >
< category android:name= " android.intent.category.LAUNCHER " /
>
< / intent-filter >
< / activity >
< activity android:name= " com.example.alertdialog.PositiveActivity
"
android:label= " @string / title _ activity _ positive " >
< / activity >
< activity
android:name= " com.example.alertdialog.NegativeActivity "
android:label= " @string / title _ activity _ negative " >
< / activity >
< / application >
< / manifest >
|
Let ' s try to run your
Camera application. I assume you have connected your actual Android Mobile
device with your computer. To run the app from Eclipse, open one of your
project ' s activity files and click Run icon
from the toolbar. Before starting your application, Eclipse will display
following window to select an option where you want to run your Android
application.
Select your mobile device
as an option and then check your mobile device which will display following
screen:
Now just press the button hello world to see the
alert box , which would be something like this
Now select any of the two
buttons and see the respective activity loading up. In case you select positve
button , this screen would appear
Now press back button on
your device , and this time select negative from your alert dialog. The
following screen would appear this time.