android 계산기 한번 만들어 보자꾸나

IT(Old)/Android 2007. 11. 27. 23:24

난 개발자다.
근데.,,월요일 화요일 회사 세바뀌를 돌았다.
고정자산이다, OA자산 실사 준비다
이것저것 때문에... 소스분석하고 개선할 시간이 진짜 없었다.
개발자는 개발만 할 수 있으면 좋겠다. 흐흐흐...

오늘 화요일 현장을 돌아다니면서.. 요놈의 android가 계속 생각난다.
진짜 내가 맘에 들어하는 놈인거 가따.

일단 안드로이드 분석은 이쯤 하면 됐다 싶고....
계산기란 놈을 함 만들어보고 싶었다.

사용자 삽입 이미지

일단 기본android 프로젝트를 생성했다 .Calc라는 놈으로


프로젝트 생성을 마치고...젤 먼저 생각해야 될 것이..
UI이다.
일단 계산하는 값 2개를 받고
연산자 선택하고
결과 같 표시를 해야 될 듯 싶어
다음과 같이 만들었다.

res/layout/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"
    >
   
 <TextView id="@+id/result"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="@string/result" />
 
 <LinearLayout android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
 
 <EditText id="@+id/leftBox" android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_weight="1" />
 
 <TextView id="@+id/operator"
  android:layout_height="fill_parent"
  android:layout_width="wrap_content"
  android:text="@string/operator"/>
 
 <EditText id="@+id/rightBox" android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_weight="1" />
 </LinearLayout>
 <LinearLayout android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
     >
     <Button id="@+id/operatorPlus"
   android:text="@string/operatorPlus"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />
 
  <Button id="@+id/operatorMinus"
   android:text="@string/operatorMinus"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />
 
  <Button id="@+id/operatorMulti"
   android:text="@string/operatorMulti"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />
 
  <Button id="@+id/operatorDivide"
   android:text="@string/operatorDivide"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />
   
    </LinearLayout>
 
 <Button id="@+id/calculate"
   android:text="@string/calculate"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />

</LinearLayout>
----------------------------------------------------------------------------------------------

두번째로는 text값을 저장하고 있는 string.xml생성
/res/values/string.xml
----------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">calculator</string>
    <string name="result">Calculation Result</string>
    <string name="calculate">calculate</string>
    <string name="operator">oper</string>
    <string name="operatorPlus">+</string>
    <string name="operatorMinus">-</string>
    <string name="operatorMulti">*</string>
    <string name="operatorDivide">/</string>
</resources>
---------------------------------------------------------------------------------------------

세번째로 각 버튼마다 이벤트를 넣었다.
src/com.tistory.jolaking/CalcActivity.java
----------------------------------------------------------------------------------------------
package com.tistory.jolaking;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class CalcActivity extends Activity {
 
 private TextView tv;
 
 private Button operatorPlus;
 private Button operatorMinus;
 private Button operatorMulti;
 private Button operatorDivide;
 
 private TextView operView;
 
 String oper;
 
 String  [] operations = {"+", "-", "*", "/"};
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
       
        Button calculate = (Button) findViewById(R.id.calculate);
        tv = (TextView) findViewById(R.id.result);
       
        operatorPlus = (Button) findViewById(R.id.operatorPlus);
        operatorMinus= (Button) findViewById(R.id.operatorMinus);
        operatorMulti= (Button) findViewById(R.id.operatorMulti);
        operatorDivide= (Button) findViewById(R.id.operatorDivide);
       
        operView = (TextView) findViewById(R.id.operator);
       
       
        operatorPlus.setOnClickListener(new View.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    oper = "+";
    operView.setText("+");
   }
         
        });
       
        operatorMinus.setOnClickListener(new View.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    oper = "-";
    operView.setText("-");
   }
         
        });
       
        operatorMulti.setOnClickListener(new View.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    oper = "*";
    operView.setText("*");
   }
         
        });
       
        operatorDivide.setOnClickListener(new View.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    oper = "/";
    operView.setText("/");
   }
         
        });
       
        calculate.setOnClickListener(new View.OnClickListener(){
         
   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
   
    try{
     EditText leftBox = (EditText) findViewById(R.id.leftBox);
     EditText rightBox = (EditText) findViewById(R.id.rightBox);
     
     String leftValue = leftBox.getText().toString();
     String rightValue = rightBox.getText().toString();
     String operator = oper;
     double result = calculate(leftValue, rightValue, operator);
     tv.setText(String.valueOf(result));
     
    }catch(Exception e){
         
     tv.setText("Incorrect String");
    }
   }
         
        });
    }
   
    public double calculate(String leftValue, String rightValue, String operator) throws Exception{
     
     double result = 0;
     int operIndex = 99;
     
     
     // operation 검사
     for(int i = 0 ; i < operations.length ; i++){
     
      if(operations[i].equals(operator)){
       
       operIndex = i;
       break;
      }
     }
     
     if(operIndex == 99)
      throw new Exception();
       
     double leftV = Double.parseDouble(leftValue);
     double rightV = Double.parseDouble(rightValue);
     
     if(operator.equals("+")){
     
      result = leftV + rightV;
     }else if(operator.equals("-")){
     
      result = leftV - rightV;
     }else if(operator.equals("*")){
     
      result = leftV * rightV;
     }else if(operator.equals("/")){
     
      result = leftV / rightV;
     }
     
     return result;   
    }
}
---------------------------------------------------------------------------------------------------

이게 끝...

생각보다 간단히 만들었다...간만에 오류 없이 컴파일까지 되더라..
역시 JAVA는 깊게 들어갈 수록 어렵지만...초반엔 적응하기 싶더라...

일단 여기까지 하면 R.java는 자동으로 생성이 될 것이고 ...실행을 해봤더니..ㅡ.ㅡ

사용자 삽입 이미지

계산기 실행화면.. 단순하다 ㅡ.ㅡ



에게 줄맞춤도 그렇고.. 디자인은 진짜 허접하다 흐흐흐
이래도 사칙연산을 실행해보면 아래와 같이 잘 되는군..후훗
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지


에혀.. 다시봐도 맘에 안드는게.. 역시 UI는 이뻐야 된다는 거..

layout 관련 API좀 더 자세히 봐야겠다..

담에는 내 핸폰에 있는 PGM UI 똑같이 만드는거 연습좀 하자..

그럼 끝.