Tuesday, August 31, 2010

Working With Canvas in Android

 Some Examples to work with Canvas


Drawing a Round Rectangle 


                Path path = new Path();
RectF rect=new RectF(60,  05, 300, 25);
// rectangle with 10 px Radius
path.addRoundRect(rect, 10, 10, Direction.CCW);
canvas.drawPath(path, p);

Drawing a text 

                              Paint p = new Paint();
             p.setColor(Color.WHITE);

                             p.setTextSize(16);
            Typeface tf=Typeface.SANS_SERIF ;
            p.setTypeface(tf);
            p.setFakeBoldText(true);


                            canvas.drawText("Map ", 380, 20,  p);

Drawing a Bitmap Image

        Bitmap mapbmp=BitmapFactory.decodeResource(getResources(), R.drawable.mapicon);
canvas.drawBitmap(mapbmp, 360, 05, p); 




Working With Bitmap Images in Android

  Scaling an Bitmap Image : 
Let suppose you have an image named bar.png in the folder drawable  of your project with size 200 * 200 px. And you wanted to scale it to some size let suppose 400 * 400 px.


Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.bar);
bmp = Bitmap.createScaledBitmap(bmp, 400,400,  true);

Now your image is scaled to 400 * 400 px.

 Rotating an Bitmap Image :  

                Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.bar);
                Matrix mtx = new Matrix();
mtx.postRotate(180);   // rotating 180 degrees clockwise
Bitmap rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth() ,bmp.getHeight() , mtx, true);  // creating the bitmap image with new angle.

Now , bmp has original image, rotatedBMP has image with 180 degrees rotated.




Friday, August 27, 2010

Lazy Loading of Images in List-view in android

Suppose ,you have a list View in your activity where you have to download the data and corresponding images and show it in the list.

Generally if you download both the data and images once and after  downloading of data you will show it in the list which will take a longer duration particularly depends on net connectivity speed.

For Reducing the time ,first we download the text ie.,names,links except images .we will put the download links in a stack and we will download them after displaying the list-view by using late downloading of images.
First the list will show and images will show in their corresponding position in the list whenever it got downloaded exactly like android market application.
This will reduce the time and we can download as many items we want to show as like working of android market list view.
You can download the sample working project by clicking here Download the full working Project.

Hope it helps you in writing fast applications.

If it doesn't work for you ,please let me know.


ImageCrop in android

AIM: To  crop the Image in android.
Solution:
The main thing  is open gallery with the intent to Crop the image.
as

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
           intent.setType("image/*");
           intent.putExtra("crop", "true");
           intent.putExtra("aspectX", aspectX);
           intent.putExtra("aspectY", aspectY);
           intent.putExtra("outputX", outputX);
           intent.putExtra("outputY", outputY);
           intent.putExtra("scale", scale);
           intent.putExtra("return-data", return_data);
           intent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri());
           intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
           intent.putExtra("noFaceDetection",!faceDetection); // lol, negative boolean noFaceDetection
           if (circleCrop) {
            intent.putExtra("circleCrop", true);
           }
         
           startActivityForResult(intent, PHOTO_PICKED);

You can download the entire project here by clicking DOWNLOAD PHOTO CROP CODE.

If any problems let me know.


Wednesday, August 25, 2010

Show two Buttons at the Bottom of the screen in ANDROID

This Layout will show the two buttons at the bottom irrespective of the top content and screen resolutions.


< RelativeLayout


        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:id="@+id/root"     >

          < LinearLayout
                android:id="@+id/buttons"
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
            >
                < Button
                        android:id="@+id/buttonbefore"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_weight="50"
                        android:text="back"/ >
                  < Button
                        android:id="@+id/buttonnext"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_weight="50"
                        android:text="Next"
                        / >
 < / LinearLayout>
< !-- Content Layout Put as you like -- >
         < ScrollView
                android:layout_above="@id/buttons"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:fillViewport="true"
               >
                   < LinearLayout
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:orientation="vertical"
                        android:layout_margin="3px">

                           < TextView
                                android:id="@+id/tv_1"
                                android:layout_width="fill_parent"
                                android:layout_height="wrap_content"
                                android:textStyle="bold"
                                android:text="start! 1111111111...."
                                / >
       
                            
                                android:id="@+id/tv_1"
                                android:layout_width="fill_parent"
                                android:layout_height="wrap_content"
                                android:textStyle="bold"
                                android:text="start! 1111111111...."
                                / >
                             < TextView
                                android:id="@+id/tv_1"
                                android:layout_width="fill_parent"
                                android:layout_height="wrap_content"
                                android:textStyle="bold"
                                android:text="start! 1111111111...."
                                / >

                  < / LinearLayout>
        < / ScrollView>


              

      

JSON parsing in android

 AIM:To parse a Json string in android.
Solution:
 Step 1 ) Declare the json string .

                JSONObject jObject;
String jString = "{\"menu\": {\"id\": \"file\", \"value\": \"File\", \"popup\": { \"menuitem\": [ {\"value\": \"New\",   \"onclick\": \"CreateNewDoc()\"}, {\"value\": \"Open\", \"onclick\": \"OpenDoc()\"}, {\"value\": \"Close\", \"onclick\": \"CloseDoc()\"}]}}}";

Step 2)  convert jString to the jObject by 
              jObject = new JSONObject(jString);
Step 3) Lets extract the menu object by creating a new menu object,
                        JSONObject menuObject = jObject.getJSONObject("menu");
 extract the attributes as follows:
String attributeId = menuObject.getString("id");
Log.i("attributeID:",""+attributeId);
                       String attributeValue = menuObject.getString("value");
                       Log.i("attributeValue:",""+attributeValue);

Ste 4) Final code:


private void JsonParsing() {
JSONObject jObject;
String jString = "{\"menu\": {\"id\": \"file\", \"value\": \"File\", \"popup\": { \"menuitem\": [ {\"value\": \"New\",   \"onclick\": \"CreateNewDoc()\"}, {\"value\": \"Open\", \"onclick\": \"OpenDoc()\"}, {\"value\": \"Close\", \"onclick\": \"CloseDoc()\"}]}}}";
try {
jObject = new JSONObject(jString);

JSONObject menuObject = jObject.getJSONObject("menu");
String attributeId = menuObject.getString("id");
System.out.println(attributeId);

String attributeValue = menuObject.getString("value");
System.out.println(attributeValue);

JSONObject popupObject = menuObject.getJSONObject("popup");
JSONArray menuitemArray = popupObject.getJSONArray("menuitem");

for (int i = 0; i < 3; i++) {
Log.i("Value",menuitemArray.getJSONObject(i)
.getString("value").toString());
Log.i("Onclick:", menuitemArray.getJSONObject(i).getString(
"onclick").toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}



Different Intents to perform some Basic operations In ANDROID


Hi,
The below are some intents and usage of it.

1) Open callHistory
      
        Intent i = new Intent();
        i.setAction(Intent.ACTION_VIEW);
        i.setData(android.provider.Contacts.People.CONTENT_URI);
        i.setType("vnd.android.cursor.dir/calls");
        startActivity(i);

2) play a specified video file from sd card with video player.
  
        File videoFile2Play = new File("/sdcard/nice_movie.mpeg");
        Intent i = new Intent();
        i.setAction(android.content.Intent.ACTION_VIEW);
        i.setDataAndType(Uri.fromFile(videoFile2Play), "video/mpeg");
        startActivity(i);

3) play a specified audio file from sd card with music player.

        File musicFile2Play = new File("/sdcard/some_file.mp3");
        Intent i2 = new Intent();
        i2.setAction(android.content.Intent.ACTION_VIEW);
        i2.setDataAndType(Uri.fromFile(musicFile2Play), "audio/mp3");
        startActivity(i2);

4) some file types and their MIME types

  
































For MIME documentation visit this link HERE.

5)  Open Browser with some website link.

Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("http://google.com"));
startActivity(i);


6) For More intents please visit this link.


If anybody knows any intents please add them as comments.It will be very helpful.


Check SD Card Present or Not in ANDROID


AIM: To check whether External Memory card is available or not.

Solution:
Use this block of code to do .

if (android.os.Environment.getExternalStorageState().equals
(android.os.Environment.MEDIA_MOUNTED))
{
          //  External Memory card is available for usage.
}
else
{
    //  External Memory card is not available for usage.ie.,not found.
}



Tuesday, August 24, 2010

Some Books and related codes for android development

Hi,
I would like to share some information with all the developers.
This post may be very useful for those who just started android development.
Here by i am giving some  links which has a great amount of stuff .
The following are some links .

Android development Books
-------------------------------------
1) Book Name   :  Professional Android application development
    Author          :  Reto Meier
   About author:   Reto has been involved in Android since the initial release  in 2007. In his spare   time, he tinkers with a wide range of development platforms including WPF and Google’s plethora of developer tools.You can check out Reto’s web site, The Radioactive Yak, you can check his blog here.
you can also DOWNLOAD THIS BOOK here.

2) Book Name   :  Android Programming   with Tutorials from the anddev.org-Community.
    Author          :  Nicolas Gramlich  
    You can also DOWNLOAD THIS BOOK here. You can check latest version of this book Here..

3) Book Name   :  McGraw[1].Hill.Android.A.Programmers.Guide
     Author          :  J.F. DiMarzio
    About author: J.F. DiMarzio is a developer with over 15 years of experience in networking and application development and is the author of seven books on computing technologies. He has become a leading resource in the fields of IT consulting and development. He lives in Central Florida.

    You can also DOWNLOAD THIS BOOK here. 

4) Book Name   :  Hello  Android   (Most recommended for Very Beginners)
     Author          : Ed Burnette 
    You can also DOWNLOAD THIS BOOK here. 

5) PowerPoint Presentations By Google Developers. (Very First step for Very Beginners)
   Please download this zip file  first.Then follow for next process of learning android.

Code Tutorials :
The following links contains small programs needed for any developer which are built as ready-made projects.
You can simply download and unzip the folder and create project just by import the source .You can see the output of the sample application.

1) Code examples for the examples which are explained in the Book  "Professional Android application development  by Reto Meier".You can download by clicking HERE.

2) Code examples for the examples which are explained in the Book  "Hello  Android  by Ed Burnette   ".You can download by clicking HERE.

3) You can browse all the widgets available in android and how to use widgets ,you can learn about android UI development by downloading the CodeExampleProject here.

Reference Links :
Some Useful Links or Blogs that you can get Much more information about android development tips and tricks and you can get clarification for your doubts also by posting your question.

2. GoogleGroups. Android Discussion Groups.   
3. Gramlich, Nicolas. Android Development Community | AndroidTutorials.                                           which is the most viewed Tutorial/Community-Board for Google Android up to date.
4. Hobbs, Zach. Hello Android
5. Nguyen, Vincent. Android Community
6. Srinivas, Davanum. Show me the code!  , which provided some very early
sample code where many programmers found a good first source.

Some sites were more, some less promising, so sooner or later the viewers pointed their focus to the more-important sites listed above.










Monday, August 23, 2010

Pick one Image from Gallery and use it in your ANDROID application

AIM: Suppose you need to open up gallery and pick one Image from Gallery and use it in your   ANDROID application .

SOLUTION:
Step 1)  Create/ initiate an image view as

               ImageView yourimgView=(ImageView)findViewById(R.id.imageview01);

Step 2)  open gallery from your application by using the following lines.


Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, 0);

Step 3) Get the selected image data and put that image in  a image view from gallery to your application by using following lines.


protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
   super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

   switch(requestCode) {
   case 0:
       if(resultCode == RESULT_OK){
           Uri selectedImage = imageReturnedIntent.getData();
           String[] filePathColumn = {MediaStore.Images.Media.DATA};

           Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
           cursor.moveToFirst();

           int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
           String filePath = cursor.getString(columnIndex); // file path of selected image
           cursor.close();
                   //  Convert file path into bitmap image using below line.
           Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);
         
                   // put  bitmapimage in your imageview
            yourimgView.setImageBitmap(yourSelectedImage);
       }
   }
}




Result : You can see the selected image from gallery in your imageview .

If you have any problems ,please send feedback.

Thursday, August 19, 2010

Creating a Basic Calculator In Android

AIM: Creating a Simple Calculator with basic operations.
Solution:
1) Create a class Calculator.java
-----------------------
public class Calculator extends Activity {

private final String SDK_VERSION = "1";
private final int MENUITEM_CLOSE = 300;

/*
* Edit Text and Button object initialization for simple
* calculator design.
*/
private EditText txtCalc=null;
private Button btnZero=null;
private Button btnOne=null;
private Button btnTwo=null;
private Button btnThree=null;
private Button btnFour=null;
private Button btnFive=null;
private Button btnSix=null;
private Button btnSeven=null;
private Button btnEight=null;
private Button btnNine=null;
private Button btnPlus=null;
private Button btnMinus=null;
private Button btnMultiply=null;
private Button btnDivide=null;
private Button btnEquals=null;
private Button btnC=null;
private Button btnDecimal=null;
private Button btnMC=null;
private Button btnMR=null;
private Button btnMM=null;
private Button btnMP=null;
private Button btnBS=null;
private Button btnPerc=null;
private Button btnSqrRoot=null;
private Button btnPM=null;

private double num = 0;
private double memNum = 0;
private int operator = 1;
// 0 = nothing, 1 = plus, 2 = minus, 3 =
// multiply, 4 = divide
private boolean readyToClear = false;
private boolean hasChanged = false;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(android.R.style.Theme_Black);
setContentView(R.layout.calculator);

this.setTitle("SimpleCalculator " + SDK_VERSION);

initControls();
initScreenLayout();
reset();
}

private void initScreenLayout() {

/*
* The following three command lines you can use depending
* upon the emulator device you are using.
*/

// 320 x 480 (Tall Display - HVGA-P) [default]
// 320 x 240 (Short Display - QVGA-L)
// 240 x 320 (Short Display - QVGA-P)

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);

// this.showAlert(dm.widthPixels +" "+ dm.heightPixels, dm.widthPixels
// +" "+ dm.heightPixels, dm.widthPixels +" "+ dm.heightPixels, false);

int height = dm.heightPixels;
int width = dm.widthPixels;

if (height < 400 || width < 300) {
txtCalc.setTextSize(20);
}

if (width < 300) {
btnMC.setTextSize(18);
btnMR.setTextSize(18);
btnMP.setTextSize(18);
btnMM.setTextSize(18);
btnBS.setTextSize(18);
btnDivide.setTextSize(18);
btnPlus.setTextSize(18);
btnMinus.setTextSize(18);
btnMultiply.setTextSize(18);
btnEquals.setTextSize(18);
btnPM.setTextSize(18);
btnPerc.setTextSize(18);
btnC.setTextSize(18);
btnSqrRoot.setTextSize(18);
btnNine.setTextSize(18);
btnEight.setTextSize(18);
btnSeven.setTextSize(18);
btnSix.setTextSize(18);
btnFive.setTextSize(18);
btnFour.setTextSize(18);
btnThree.setTextSize(18);
btnTwo.setTextSize(18);
btnOne.setTextSize(18);
btnZero.setTextSize(18);
btnDecimal.setTextSize(18);
}

btnZero.setTextColor(Color.MAGENTA);
btnOne.setTextColor(Color.MAGENTA);
btnTwo.setTextColor(Color.MAGENTA);
btnThree.setTextColor(Color.MAGENTA);
btnFour.setTextColor(Color.MAGENTA);
btnFive.setTextColor(Color.MAGENTA);
btnSix.setTextColor(Color.MAGENTA);
btnSeven.setTextColor(Color.MAGENTA);
btnEight.setTextColor(Color.MAGENTA);
btnNine.setTextColor(Color.MAGENTA);
btnPM.setTextColor(Color.MAGENTA);
btnDecimal.setTextColor(Color.MAGENTA);

btnMP.setTextColor(Color.BLUE);
btnMM.setTextColor(Color.BLUE);
btnMR.setTextColor(Color.BLUE);
btnMC.setTextColor(Color.BLUE);
btnBS.setTextColor(Color.BLUE);
btnC.setTextColor(Color.RED);
btnPerc.setTextColor(Color.BLACK);
btnSqrRoot.setTextColor(Color.BLACK);
}

private void initControls() {
txtCalc = (EditText) findViewById(R.id.txtCalc);
btnZero = (Button) findViewById(R.id.btnZero);
btnOne = (Button) findViewById(R.id.btnOne);
btnTwo = (Button) findViewById(R.id.btnTwo);
btnThree = (Button) findViewById(R.id.btnThree);
btnFour = (Button) findViewById(R.id.btnFour);
btnFive = (Button) findViewById(R.id.btnFive);
btnSix = (Button) findViewById(R.id.btnSix);
btnSeven = (Button) findViewById(R.id.btnSeven);
btnEight = (Button) findViewById(R.id.btnEight);
btnNine = (Button) findViewById(R.id.btnNine);
btnPlus = (Button) findViewById(R.id.btnPlus);
btnMinus = (Button) findViewById(R.id.btnMinus);
btnMultiply = (Button) findViewById(R.id.btnMultiply);
btnDivide = (Button) findViewById(R.id.btnDivide);
btnEquals = (Button) findViewById(R.id.btnEquals);
btnC = (Button) findViewById(R.id.btnC);
btnDecimal = (Button) findViewById(R.id.btnDecimal);
btnMC = (Button) findViewById(R.id.btnMC);
btnMR = (Button) findViewById(R.id.btnMR);
btnMM = (Button) findViewById(R.id.btnMM);
btnMP = (Button) findViewById(R.id.btnMP);
btnBS = (Button) findViewById(R.id.btnBS);
btnPerc = (Button) findViewById(R.id.btnPerc);
btnSqrRoot = (Button) findViewById(R.id.btnSqrRoot);
btnPM = (Button) findViewById(R.id.btnPM);

btnZero.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleNumber(0);
}
});
btnOne.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleNumber(1);
}
});
btnTwo.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleNumber(2);
}
});
btnThree.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleNumber(3);
}
});
btnFour.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleNumber(4);
}
});
btnFive.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleNumber(5);
}
});
btnSix.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleNumber(6);
}
});
btnSeven.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleNumber(7);
}
});
btnEight.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleNumber(8);
}
});
btnNine.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleNumber(9);
}
});
btnPlus.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleEquals(1);
}
});
btnMinus.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleEquals(2);
}
});
btnMultiply.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleEquals(3);
}
});
btnDivide.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleEquals(4);
}
});
btnEquals.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleEquals(0);
}
});
btnC.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
reset();
}
});
btnDecimal.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleDecimal();
}
});
btnPM.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handlePlusMinus();
}
});
btnMC.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
memNum = 0;
}
});
btnMR.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
setValue(Double.toString(memNum));
}
});
btnMM.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
memNum = memNum
- Double.parseDouble(txtCalc.getText().toString());
operator = 0;
}
});
btnMP.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
memNum = memNum
+ Double.parseDouble(txtCalc.getText().toString());
operator = 0;
}
});
btnBS.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
handleBackspace();
}
});
btnSqrRoot.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
setValue(Double.toString(Math.sqrt(Double.parseDouble(txtCalc
.getText().toString()))));
}
});
btnPerc.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
setValue(Double.toString(num
* (0.01 * Double.parseDouble(txtCalc.getText()
.toString()))));
}
});

txtCalc.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int i, android.view.KeyEvent e) {
if (e.getAction() == KeyEvent.ACTION_DOWN) {
int keyCode = e.getKeyCode();

// txtCalc.append("["+Integer.toString(keyCode)+"]");

switch (keyCode) {
case KeyEvent.KEYCODE_0:
handleNumber(0);
break;

case KeyEvent.KEYCODE_1:
handleNumber(1);
break;

case KeyEvent.KEYCODE_2:
handleNumber(2);
break;

case KeyEvent.KEYCODE_3:
handleNumber(3);
break;

case KeyEvent.KEYCODE_4:
handleNumber(4);
break;

case KeyEvent.KEYCODE_5:
handleNumber(5);
break;

case KeyEvent.KEYCODE_6:
handleNumber(6);
break;

case KeyEvent.KEYCODE_7:
handleNumber(7);
break;

case KeyEvent.KEYCODE_8:
handleNumber(8);
break;

case KeyEvent.KEYCODE_9:
handleNumber(9);
break;

case 43:
handleEquals(1);
break;

case KeyEvent.KEYCODE_EQUALS:
handleEquals(0);
break;

case KeyEvent.KEYCODE_MINUS:
handleEquals(2);
break;

case KeyEvent.KEYCODE_PERIOD:
handleDecimal();
break;

case KeyEvent.KEYCODE_C:
reset();
break;

case KeyEvent.KEYCODE_SLASH:
handleEquals(4);
break;

case KeyEvent.KEYCODE_DPAD_DOWN:
return false;
}
}

return true;
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0,1, MENUITEM_CLOSE, "Close");

return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENUITEM_CLOSE:
finish();
break;
}

return super.onOptionsItemSelected(item);
}

private void handleEquals(int newOperator) {
if (hasChanged) {
switch (operator) {
case 1:
num = num + Double.parseDouble(txtCalc.getText().toString());
break;
case 2:
num = num - Double.parseDouble(txtCalc.getText().toString());
break;
case 3:
num = num * Double.parseDouble(txtCalc.getText().toString());
break;
case 4:
num = num / Double.parseDouble(txtCalc.getText().toString());
break;
}

String txt = Double.toString(num);
txtCalc.setText(txt);
txtCalc.setSelection(txt.length());

readyToClear = true;
hasChanged = false;
}

operator = newOperator;
}

private void handleNumber(int num) {
if (operator == 0)
reset();

String txt = txtCalc.getText().toString();
if (readyToClear) {
txt = "";
readyToClear = false;
} else if (txt.equals("0"))
txt = "";

txt = txt + Integer.toString(num);

txtCalc.setText(txt);
txtCalc.setSelection(txt.length());

hasChanged = true;
}

private void setValue(String value) {
if (operator == 0)
reset();

if (readyToClear) {
readyToClear = false;
}

txtCalc.setText(value);
txtCalc.setSelection(value.length());

hasChanged = true;
}

private void handleDecimal() {
if (operator == 0)
reset();

if (readyToClear) {
txtCalc.setText("0.");
txtCalc.setSelection(2);
readyToClear = false;
hasChanged = true;
} else {
String txt = txtCalc.getText().toString();

if (!txt.contains(".")) {
txtCalc.append(".");
hasChanged = true;
}
}
}

private void handleBackspace() {
if (!readyToClear) {
String txt = txtCalc.getText().toString();
if (txt.length() > 0) {
txt = txt.substring(0, txt.length() - 1);
if (txt.equals(""))
txt = "0";

txtCalc.setText(txt);
txtCalc.setSelection(txt.length());
}
}
}

private void handlePlusMinus() {
if (!readyToClear) {
String txt = txtCalc.getText().toString();
if (!txt.equals("0")) {
if (txt.charAt(0) == '-')
txt = txt.substring(1, txt.length());
else
txt = "-" + txt;

txtCalc.setText(txt);
txtCalc.setSelection(txt.length());
}
}
}

private void reset() {
num = 0;
txtCalc.setText("0");
txtCalc.setSelection(1);
operator = 1;
}
}

-----------------------

Create a Layout file (calculator.xml)



< LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">

< EditText android:id="@+id/txtCalc"
android:layout_height="wrap_content" android:textSize="56sp"
android:typeface="normal" android:textStyle="normal" android:text="0"
android:gravity="bottom" android:layout_width="fill_parent" android:singleLine="true"/>

< LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="horizontal"
android:layout_weight="1">

< Button android:id="@+id/btnMP" android:padding="0px"
android:text="M+" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnMM" android:padding="0px"
android:text="M-" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnMR" android:padding="0px"
android:text="MR" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnMC" android:padding="0px"
android:text="MC" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnBS" android:padding="0px"
android:text="BS" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />
< / LinearLayout>


< LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="horizontal"
android:layout_weight="1">

< Button android:id="@+id/btnSeven" android:padding="0px"
android:text="7" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnEight" android:padding="0px"
android:text="8" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnNine" android:padding="0px"
android:text="9" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnDivide" android:padding="0px"
android:text="/" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnC" android:padding="0px"
android:text="C" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< / LinearLayout >


< LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="horizontal"
android:layout_weight="1" >

< Button android:id="@+id/btnFour" android:padding="0px"
android:text="4" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnFive" android:padding="0px"
android:text="5" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnSix" android:padding="0px"
android:text="6" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

<  Button android:id="@+id/btnMultiply" android:padding="0px"
android:text="*" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnPerc" android:padding="0px"
android:text="%" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< / LinearLayout>


< LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="horizontal"
android:layout_weight="1" >

< Button android:id="@+id/btnOne" android:padding="0px"
android:text="1" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnTwo" android:padding="0px"
android:text="2" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnThree" android:padding="0px"
android:text="3" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnMinus" android:padding="0px"
android:text="-" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnSqrRoot" android:padding="0px"
android:text="√" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="24sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" / >

< / LinearLayout>


< LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="horizontal"
android:layout_weight="1" >

< Button android:id="@+id/btnZero" android:padding="0px"
android:text="0" android:gravity="center" android:layout_span="2"
android:typeface="serif" android:textStyle="bold"
android:textSize="23sp" android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />
// about .805

< Button android:id="@+id/btnDecimal" android:padding="0px"
android:text="." android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="23sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnPM" android:padding="0px"
android:text="+/-" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="23sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnPlus" android:padding="0px"
android:text="+" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="23sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" />

< Button android:id="@+id/btnEquals" android:padding="0px"
android:text="=" android:gravity="center" android:typeface="serif"
android:textStyle="bold" android:textSize="23sp"
android:layout_height="fill_parent"
android:layout_width="fill_parent" android:layout_weight="1" / >
< / Linear Layout >

< / Linear Layout>

Please download the working code files by clicking the below links.

Calculator.java  

Calculator.xml 


Output would be as follows:

Android Developers Blog

Ram's shared items