본문 바로가기

Dev/안드로이드

안드로이드 프로그래밍 4장 직접 풀어보기 4-3

728x90
반응형
Android Studio를 활용한 안드로이드 프로그래밍
국내도서
저자 : 우재남,박길식
출판 : 한빛아카데미 2020.01.08
상세보기

한빛아카데미 IT COOKBOOK 276 Android Studio를 활용한 안드로이드 프로그래밍 5판 p.181

 

[실습 4-1]에 다음과 같이 기능을 추가하거나 변경하라.

 

터치가 아닌 클릭으로 변경

 

나머지값 구하기 버튼 추가

 

값을 입력하지 않고, 버튼을 클릭할 때 오류 메시지를 토스트로 나타내기

 

실숫값 계산하기

 

0으로 나누면 토스트 메시지를 나타내고 계산하지 않기

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >


    <EditText
        android:id="@+id/Edit1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:hint="숫자 1"
        />

    <EditText
        android:id="@+id/Edit2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:hint="숫자 2"
        />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="더하기"
        android:id="@+id/BtnAdd"
        android:clickable="true"
        />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="빼기"
        android:id="@+id/BtnSub"
        android:clickable="true"
        />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="곱하기"
        android:id="@+id/BtnMul"
        android:clickable="true"
        />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="나누기"
        android:id="@+id/BtnDiv"
        android:clickable="true"
        />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="나머지"
        android:id="@+id/BtnExt"
        android:clickable="true"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/TextResult"
        android:textSize="30dp"
        android:textColor="#FF0000"
        android:layout_margin="10dp"
        android:text="계산 결과 : "
        />
</LinearLayout>

 

나머지 버튼을 하나 추가했고, 터치가 아닌 클릭으로 변경이 있기 때문에 android:clickable="true"속성을 추가했습니다.

activity_main.xml 동작 화면

 

MainActivity.java

package com.cookandroid.project4_1;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    EditText Edit1, Edit2;
    Button btnAdd, btnSub, btnMul, btnDiv, btnExt;
    TextView textResult;
    String num1, num2;
    Float result;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("초간단 계산기(수정)");

        Edit1=(EditText) findViewById(R.id.Edit1);
        Edit2=(EditText) findViewById(R.id.Edit2);

        btnAdd=(Button) findViewById(R.id.BtnAdd);
        btnSub=(Button) findViewById(R.id.BtnSub);
        btnMul=(Button) findViewById(R.id.BtnMul);
        btnDiv=(Button) findViewById(R.id.BtnDiv);
        btnExt=(Button) findViewById(R.id.BtnExt);

        textResult=(TextView) findViewById(R.id.TextResult);

        btnAdd.setOnClickListener(new View.OnClickListener(){
            public void onClick(View arg0){
                num1=Edit1.getText().toString();
                num2=Edit2.getText().toString();
                if (num1.trim().equals("")||num2.trim().equals("")){
                    Toast myToast = Toast.makeText(getApplicationContext(),"입력 값이 비었습니다.", Toast.LENGTH_SHORT);
                    myToast.show();
                } else {
                    result=Float.parseFloat(num1) + Float.parseFloat(num2);
                    textResult.setText("계산 결과 : " + result.toString());
                }
            }
        });

        btnSub.setOnClickListener(new View.OnClickListener(){
            public void onClick(View arg0){
                num1=Edit1.getText().toString();
                num2=Edit2.getText().toString();
                if(num1.trim().equals("")||num2.trim().equals("")){
                    Toast myToast = Toast.makeText(getApplicationContext(),"입력 값이 비었습니다.", Toast.LENGTH_SHORT);
                    myToast.show();
                } else {
                    result=Float.parseFloat(num1) - Float.parseFloat(num2);
                    textResult.setText("계산 결과 : " + result.toString());
                }
            }
        });

        btnMul.setOnClickListener(new View.OnClickListener(){
            public void onClick(View arg0){
                num1=Edit1.getText().toString();
                num2=Edit2.getText().toString();
                if (num1.trim().equals("")||num2.trim().equals("")){
                   Toast myToast = Toast.makeText(getApplicationContext(),"입력 값이 비었습니다.", Toast.LENGTH_SHORT);
                   myToast.show();
                } else {
                    result=Float.parseFloat(num1) * Float.parseFloat(num2);
                    textResult.setText("계산 결과 : " + result.toString());
                }
            }
        });

        btnDiv.setOnClickListener(new View.OnClickListener(){
            public void onClick(View arg0){
                num1=Edit1.getText().toString();
                num2=Edit2.getText().toString();
                String zero="0";
                if(num1.trim().equals("")||num2.trim().equals("")){
                    Toast myToast=Toast.makeText(getApplicationContext(), "입력 값이 비었습니다.", Toast.LENGTH_SHORT);
                    myToast.show();
                } else if(num2.equals(zero)){
                    Toast myToast = Toast.makeText(getApplicationContext(),"0으로 나눌 수 없습니다.", Toast.LENGTH_SHORT);
                    myToast.show();
                } else {
                    result=Float.parseFloat(num1) / Float.parseFloat(num2);
                    textResult.setText("계산 결과 : " + result.toString());
                }
            }
        });

        btnExt.setOnClickListener(new View.OnClickListener(){
            public void onClick(View arg0){
                num1=Edit1.getText().toString();
                num2=Edit2.getText().toString();
                if(num1.trim().equals("")||num2.trim().equals("")){
                    Toast myToast = Toast.makeText(getApplicationContext(), "입력 값이 비었습니다.", Toast.LENGTH_SHORT);
                    myToast.show();
                } else {
                    result=Float.parseFloat(num1) % Float.parseFloat(num2);
                    textResult.setText("계산 결과 : " + result.toString());
                }
            }
        });
    }
}

 

각 버튼에 result가 실숫값을 계산해야하므로 parseInt가 아닌 parseFloat를 적용했고, 입력값이 없고 버튼을 누르면

 

토스트 메시지가 출력되어야 하므로 Toast를 추가했습니다.

 

0으로 나눌 시에는 계산하지 않고 토스트 메시지를 출력해야 하므로 else if를 사용하여 조건을 추가했습니다.

 

버튼들도 setOnTouchListener가 아니라 setOnClickListener를 사용했습니다.

 

Android Studio AVD 실행 결과

어플리케이션 build 결과

 

728x90
반응형

"); wcs_do();