본문 바로가기
안드로이드

DAY012. Android (2)

by 피톤치즈 2017. 1. 24.
반응형

Android

  • activity_[project_name].xml 의 layout에 대해 사용 예제.
  • layout

    • 속성
      • margin - 어떤 객체(버튼, 텍스트 등)가 layout내에 놓였을때 layout의 시작점 및 다른 객체와의 간격 등의 여백 정도로 이해하면 될것 같다.
      • padding - margin과 비슷한 개념이지만 본인 내에 텍스트나 버튼 등의 객체가 놓이는 위치를 의미.
      • 같은것 같으면서도 다름.
    • 종류
      • relativeLayout - 자식 뷰를 상대적으로 배치할 수 있는 뷰
      • linearLayout - 자식뷰를 선형적으로 배치할 수 있는 뷰, 수직과 수평 모드가 있음.
      • gridLayout - 자식뷰를 바둑판 식으로 배치할 수 있는 뷰
  • 간단한 계산기 만들기.

    • 조건
      1. 수식을 보여주는 preview 창 만들기.
      2. 결과를 보여주는 resultView 창 만들기
      3. 0~9, 취소, =, +, -, *, /


  • 소스 1. project_nameActivity.java 기존 소스에 추가
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ //확인

    //변수선언
    Button bt1;
    Button bt2;
    Button bt3;
    Button bt4;
    Button bt5;
    Button bt6;
    Button bt7;
    Button bt8;
    Button bt9;
    Button bt0;
    Button btPS;
    Button btMS;
    Button btMY;
    Button btDE;
    Button btRUN;
    Button btCAN;

    TextView result;
    TextView preview;

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    protected void onCreate() { //함수내에 아래 정리

        //ID 배정.
        bt1 = (Button) findViewById(R.id.button15);    //1
        bt2 = (Button) findViewById(R.id.button16);    //2
        bt3 = (Button) findViewById(R.id.button17);    //3
        bt4 = (Button) findViewById(R.id.button19);    //4
        bt5 = (Button) findViewById(R.id.button20);    //5
        bt6 = (Button) findViewById(R.id.button21);    //6
        bt7 = (Button) findViewById(R.id.button23);    //7
        bt8 = (Button) findViewById(R.id.button24);    //8
        bt9 = (Button) findViewById(R.id.button25);    //9
        bt0 = (Button) findViewById(R.id.button28);    //0

        btCAN = (Button) findViewById(R.id.button27);    //ac or ce
        btRUN = (Button) findViewById(R.id.button29);    // =

        btPS = (Button) findViewById(R.id.button18);    //+
        btMS = (Button) findViewById(R.id.button22);    //-
        btMY = (Button) findViewById(R.id.button26);    //*
        btDE = (Button) findViewById(R.id.button30);    // /

        //버튼을 눌렀을때 반응할 수 있도록 Listener Setting
        bt1.setOnClickListener(this);
        bt2.setOnClickListener(this);
        bt3.setOnClickListener(this);
        bt4.setOnClickListener(this);

        bt5.setOnClickListener(this);
        bt6.setOnClickListener(this);
        bt7.setOnClickListener(this);
        bt8.setOnClickListener(this);

        bt9.setOnClickListener(this);
        bt0.setOnClickListener(this);
        btRUN.setOnClickListener(this);
        btCAN.setOnClickListener(this);

        btPS.setOnClickListener(this);
        btMS.setOnClickListener(this);
        btMY.setOnClickListener(this);
        btDE.setOnClickListener(this);

        result = (TextView) findViewById(R.id.textView);
        preview = (TextView)findViewById(R.id.textView4);
        result.setText("");
        preview.setText("");
  • 소스 2. onCreate() 함수 아래에 onClick() 함수 선언 및 소스 구성
    //소스는 간단하게 2개의 숫자와 1개의 수식을 계산하도록 설계

    public void onClick(View v) {

        switch (v.getId()) {
            case R.id.button15:    //1
                preview.setText(preview.getText() + "1");
                break;

            case R.id.button16:    //2
                preview.setText(preview.getText() + "2");

                break;

            case R.id.button17:    //3
                preview.setText(preview.getText() + "3");

                break;

            case R.id.button18:    //+
                String tpPlus = (String)preview.getText();
                char[] carrPlus = tpPlus.toCharArray();
                int end = carrPlus.length - 1;
                //if ( carrPlus[end] == '+' || carrPlus[end] == '-' || carrPlus[end] == '*' || carrPlus[end] == '/' ) { //부호면
                if (carrPlus[end] < '0' || carrPlus[end] > '9'){
                    carrPlus[end] = '+';
                    tpPlus = new String(carrPlus);
                    preview.setText(tpPlus);
                }
                else {
                    preview.setText(preview.getText() + "+");
                }
                break;

            case R.id.button19:    //4
                preview.setText(preview.getText() + "4");

                break;

            case R.id.button20:    //5
                preview.setText(preview.getText() + "5");

                break;

            case R.id.button21:    //6
                preview.setText(preview.getText() + "6");

                break;

            case R.id.button22:    //-
                String tpMinus = (String)preview.getText();
                char[] carrMinus = tpMinus.toCharArray();
                int endMinus = carrMinus.length - 1;
                if (carrMinus[endMinus] < '0' || carrMinus[endMinus] > '9'){    //부호면
                    carrMinus[endMinus] = '-';
                    tpMinus = new String(carrMinus);
                    preview.setText(tpMinus);
                }
                else {
                    preview.setText(preview.getText() + "-");
                }

                break;

            case R.id.button23:    //7
                preview.setText(preview.getText() + "7");

                break;

            case R.id.button24:    //8
                preview.setText(preview.getText() + "8");

                break;

            case R.id.button25:    //9
                preview.setText(preview.getText() + "9");

                break;

            case R.id.button26:    //*
                String tpMultiple = (String)preview.getText();
                char[] carrMultiple = tpMultiple.toCharArray();
                int endMultiple = carrMultiple.length - 1;
                if (carrMultiple[endMultiple] < '0' || carrMultiple[endMultiple] > '9'){    //부호면
                    carrMultiple[endMultiple] = '*';
                    tpMultiple = new String(carrMultiple);
                    preview.setText(tpMultiple);
                }
                else {
                    preview.setText(preview.getText() + "*");
                }
                break;

            case R.id.button27:    //cancel
                result.setText("");
                preview.setText("");
                break;

            case R.id.button28:    //0
                preview.setText(preview.getText() + "0");

                break;

            case R.id.button29:    //run

                String str = (String) preview.getText();
                String[] istr = str.split("(?<=[*/+-])|(?=[*/+-])");

                double sum = 0;

                if (istr[1].equals("+")) {
                    sum = Integer.parseInt(istr[0]) + Integer.parseInt(istr[2]);
                    System.out.println("plus");
                }
                else if (istr[1].equals("-")) {
                    sum = Integer.parseInt(istr[0]) - Integer.parseInt(istr[2]);
                    System.out.println("minus");
                }
                else if (istr[1].equals("*")) {
                    sum = Integer.parseInt(istr[0]) * Integer.parseInt(istr[2]);
                    System.out.println("multiple");
                }
                else if (istr[1].equals("/")) {
                    sum = Integer.parseInt(istr[0]) / Integer.parseInt(istr[2]);
                    System.out.println("divide");
                }
                result.setText(sum + "");

                break;

            case R.id.button30:    ///
                String tpDivide = (String)preview.getText();
                char[] carrDivide = tpDivide.toCharArray();
                int endDivide = carrDivide.length - 1;
                if (carrDivide[endDivide] < '0' || carrDivide[endDivide] > '9'){    //부호면
                    carrDivide[endDivide] = '/';
                    tpDivide = new String(carrDivide);
                    preview.setText(tpDivide);
                }
                else {
                    preview.setText(preview.getText() + "/");
                }
                break;
        }
    }


반응형

'안드로이드' 카테고리의 다른 글

Google Map Example (fragment)  (0) 2017.02.06
DAY015. Android(5)  (0) 2017.01.31
DAY014. Android(4)  (0) 2017.01.26
DAY011. Android(1)  (0) 2017.01.23

댓글