Basic Android Calculator

 Basic Android Calculator


Default.java

package com.woplandia.calc;


import java.util.HashSet;

import java.util.Set;


import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;


public class Default extends Activity {


private TextView result;


private String operand;


private String operator;


private Set<String> numbers;


private Set<String> operators;


/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);


result = (TextView) findViewById(R.id.result);

}


/**

 * Initialization of set of number values.

 */

private void initNumbers() {

numbers = new HashSet<String>();

for (int i = 0; i < 10; i++) {

numbers.add(Integer.toString(i));

}

}


/**

 * Initialization of set of operators.

 */

private void initOperators() {

operators = new HashSet<String>();

String[] ops = { "+", "-", "*", "/" };

for (String operator : ops) {

operators.add(operator);

}

}


/**

 * Button click event handler.

 * 

 * @param view

 *            clicked button

 * @return void

 */

public void handleClick(View view) {

Button clicked = (Button) view;

String value = clicked.getText().toString();


if (isNumerical(value)) {

if (!isDefaultResult(result.getText().toString())) {

value = result.getText().toString() + value;

}

} else if (isOperator(value)) {

operand = result.getText().toString();

operator = value;

} else if (isClear(value)) {

value = getString(R.string.result_default);

} else {

double a = Double.parseDouble(operand), b = Double

.parseDouble(result.getText().toString());


if (operator.equals("+")) {

value = Double.toString(a + b);

}


// Reset values.

operator = null;

operand = null;

}


result.setText(value);

}


/**

 * Test if value is the same as clear button's.

 * 

 * @param value

 *            button value

 * @return true if button is clear button

 */

private boolean isClear(String value) {

return value.equals(getString(R.string.buttonClear));

}


/**

 * Test if value is operator.

 * 

 * @param value

 *            button value

 * @return true if value is operator

 */

private boolean isOperator(String value) {

if (operators == null) {

initOperators();

}

return operators.contains(value);

}


/**

 * Test if result was modified.

 * 

 * @param value

 *            result value

 * @return true if result is default

 */

private boolean isDefaultResult(String value) {

return value.equals(getString(R.string.result_default));

}


/**

 * Test if value is numerical.

 * 

 * @param value

 *            button's value

 * @return true if value is numerical

 */

private boolean isNumerical(String value) {

if (numbers == null) {

initNumbers();

}

return numbers.contains(value);

}


}

main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

    <TableLayout

     android:id="@+id/tableLayout1"

     android:layout_height="fill_parent"

     android:layout_width="fill_parent">

<TextView

android:id="@+id/result"

android:layout_height="25pt"

android:textSize="14pt"

android:padding="4pt"

android:gravity="right"

android:text="@string/result_default"

/>

<View

         android:layout_height="2dip"

         android:background="#FF909090" />

        

        <TableRow

         android:layout_height="wrap_content"

         android:layout_width="match_parent"

         android:layout_marginTop="5pt"

         android:id="@+id/tableRow2"

         android:paddingLeft="4pt"

         android:paddingRight="4pt">

            <Button

             android:text="@string/buttonSeven"

             android:textSize="14pt"

             android:id="@+id/button7"

             android:layout_width="25pt"

             android:layout_height="25pt"

             android:layout_weight="1"

             android:onClick="handleClick" />

            <Button

             android:text="@string/buttonEight"

             android:textSize="14pt"

             android:id="@+id/button8"

             android:layout_height="25pt"

             android:layout_width="25pt"

             android:layout_weight="1"

             android:onClick="handleClick" />

            <Button

             android:text="@string/buttonNine"

             android:textSize="14pt"

             android:id="@+id/button9"

             android:layout_width="25pt"

             android:layout_height="25pt"

             android:layout_weight="1"

             android:onClick="handleClick" />

            <Button

             android:text="@string/buttonDivide"

             android:textSize="14pt"

             android:id="@+id/buttonDivide"

             android:layout_width="25pt"

             android:layout_height="25pt"

             android:layout_weight="1"

             android:onClick="handleClick" />

        </TableRow>

        

        <TableRow

         android:layout_height="wrap_content"

         android:layout_width="match_parent"

         android:layout_marginTop="1pt"

         android:id="@+id/tableRow2"

         android:paddingLeft="4pt"

         android:paddingRight="4pt">

            <Button

             android:text="@string/buttonFour"

             android:textSize="14pt"

             android:id="@+id/button4"

             android:layout_width="25pt"

             android:layout_height="25pt"

             android:layout_weight="1"

             android:onClick="handleClick" />

            <Button

             android:text="@string/buttonFive"

             android:textSize="14pt"

             android:id="@+id/button5"

             android:layout_height="25pt"

             android:layout_width="25pt"

             android:layout_weight="1"

             android:onClick="handleClick" />

            <Button

             android:text="@string/buttonSix"

             android:textSize="14pt"

             android:id="@+id/button6"

             android:layout_width="25pt"

             android:layout_height="25pt"

             android:layout_weight="1"

             android:onClick="handleClick" />

            <Button

             android:text="@string/buttonMutiply"

             android:textSize="14pt"

             android:id="@+id/buttonMultiply"

             android:layout_width="25pt"

             android:layout_height="25pt"

             android:layout_weight="1" 

             android:onClick="handleClick" />

        </TableRow>

        

        <TableRow

         android:layout_height="wrap_content"

         android:layout_width="match_parent"

         android:layout_marginTop="1pt"

         android:id="@+id/tableRow2"

         android:paddingLeft="4pt"

         android:paddingRight="4pt">

            <Button

             android:text="@string/buttonOne"

             android:textSize="14pt"

             android:id="@+id/button1"

             android:layout_width="25pt"

             android:layout_height="25pt"

             android:layout_weight="1"

             android:onClick="handleClick" />

            <Button

             android:text="@string/buttonTwo"

             android:textSize="14pt"

             android:id="@+id/button2"

             android:layout_height="25pt"

             android:layout_width="25pt"

             android:layout_weight="1"

             android:onClick="handleClick" />

            <Button

             android:text="@string/buttonThree"

             android:textSize="14pt"

             android:id="@+id/button3"

             android:layout_width="25pt"

             android:layout_height="25pt"

             android:layout_weight="1"

             android:onClick="handleClick" />

            <Button

             android:text="@string/buttonMinus"

             android:textSize="14pt"

             android:id="@+id/buttonMinus"

             android:layout_width="25pt"

             android:layout_height="25pt"

             android:layout_weight="1"

             android:onClick="handleClick" />

        </TableRow>

        

         <TableRow

         android:layout_height="wrap_content"

         android:layout_width="match_parent"

         android:layout_marginTop="1pt"

         android:id="@+id/tableRow2"

         android:paddingLeft="4pt"

         android:paddingRight="4pt">

            <Button

             android:text="@string/buttonClear"

             android:textSize="14pt"

             android:id="@+id/buttonClear"

             android:layout_width="25pt"

             android:layout_height="25pt"

             android:layout_weight="1"

             android:onClick="handleClick" />

            <Button

             android:text="@string/buttonZero"

             android:textSize="14pt"

             android:id="@+id/button0"

             android:layout_height="25pt"

             android:layout_width="25pt"

             android:layout_weight="1"

             android:onClick="handleClick" />

            <Button

             android:text="@string/buttonResult"

             android:textSize="14pt"

             android:id="@+id/buttonResult"

             android:layout_width="25pt"

             android:layout_height="25pt"

             android:layout_weight="1"

             android:onClick="handleClick" />

            <Button

             android:text="@string/buttonPlus"

             android:textSize="14pt"

             android:id="@+id/buttonPlus"

             android:layout_width="25pt"

             android:layout_height="25pt"

             android:layout_weight="1"

             android:onClick="handleClick" />

        </TableRow>

    </TableLayout>

</LinearLayout>

strings.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>

    <string name="hello">Hello World, Default!</string>

    <string name="app_name">Dummy Calc</string>

    

    <string name="result_default">0</string>

    

    <string name="buttonPlus">+</string>

    <string name="buttonMinus">-</string>

    <string name="buttonMutiply">*</string>

    <string name="buttonDivide">/</string>

    <string name="buttonClear">C</string>

    <string name="buttonResult">=</string>

    

    <string name="buttonZero">0</string>

    

    <string name="buttonOne">1</string>

    <string name="buttonTwo">2</string>

    <string name="buttonThree">3</string>

    

    

    <string name="buttonFour">4</string>

    <string name="buttonFive">5</string>

    <string name="buttonSix">6</string>

    

    <string name="buttonSeven">7</string>

    <string name="buttonEight">8</string>

    <string name="buttonNine">9</string>

</resources>



Comments