Friday, April 13, 2012

Basic Calculator In Android

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;
}
}

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>

No comments:

Post a Comment