본문 바로가기

Dev/안드로이드

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

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

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

[실습 5-2]를 그리드레이아웃으로 변경하여 실행하라.

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:columnCount="5"
    android:rowCount="9"
    android:orientation="vertical"
    android:clipChildren="true"
    tools:context=".MainActivity">

        <EditText
            android:id="@+id/Edit1"
            android:layout_columnSpan="5"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="fill_horizontal"
            android:hint="숫자1 입력" />

        <EditText
            android:id="@+id/Edit2"
            android:layout_columnSpan="5"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="fill_horizontal"
            android:hint="숫자2 입력" />


        <Button
            android:id="@+id/BtnNum0"
            android:layout_column="0"
            android:layout_row="2"
            android:layout_width="81dp"
            android:text="0" />

        <Button
            android:id="@+id/BtnNum1"
            android:layout_column="1"
            android:layout_row="2"
            android:layout_width="81dp"
            android:text="1" />

        <Button
            android:id="@+id/BtnNum2"
            android:layout_column="2"
            android:layout_row="2"
            android:layout_width="81dp"
            android:text="2" />

        <Button
            android:id="@+id/BtnNum3"
            android:layout_row="2"
            android:layout_column="3"
            android:layout_width="81dp"
            android:text="3" />

        <Button
            android:id="@+id/BtnNum4"
            android:layout_column="4"
            android:layout_row="2"
            android:layout_width="81dp"
            android:text="4" />

        <Button
            android:id="@+id/BtnNum5"
            android:layout_column="0"
            android:layout_row="3"
            android:layout_width="81dp"
            android:text="5" />

        <Button
            android:id="@+id/BtnNum6"
            android:layout_column="1"
            android:layout_row="3"
            android:layout_width="81dp"
            android:text="6" />

        <Button
            android:id="@+id/BtnNum7"
            android:layout_column="2"
            android:layout_row="3"
            android:layout_width="81dp"
            android:text="7" />

        <Button
            android:id="@+id/BtnNum8"
            android:layout_column="3"
            android:layout_row="3"
            android:layout_width="81dp"
            android:text="8" />

        <Button
            android:id="@+id/BtnNum9"
            android:layout_column="4"
            android:layout_row="3"
            android:layout_width="81dp"
            android:text="9" />


        <Button
            android:id="@+id/BtnAdd"
            android:layout_row="4"
            android:layout_column="0"
            android:layout_columnSpan="5"
            android:layout_gravity="fill_horizontal"
            android:text="더하기" />


        <Button
            android:id="@+id/BtnSub"
            android:layout_column="0"
            android:layout_columnSpan="5"
            android:layout_row="5"
            android:layout_gravity="fill_horizontal"
            android:text="빼기" />


        <Button
            android:id="@+id/BtnMul"
            android:layout_column="0"
            android:layout_columnSpan="5"
            android:layout_row="6"
            android:layout_gravity="fill_horizontal"
            android:text="곱하기" />


        <Button
            android:id="@+id/BtnDiv"
            android:layout_column="0"
            android:layout_columnSpan="5"
            android:layout_row="7"
            android:layout_gravity="fill_horizontal"
            android:text="나누기" />


        <TextView
            android:id="@+id/TextResult"
            android:layout_row="8"
            android:layout_column="0"
            android:layout_columnSpan="5"
            android:layout_margin="5dp"
            android:layout_gravity="fill_horizontal"
            android:text="계산 결과 : "
            android:textColor="#FF0000"
            android:textSize="20dp" />

</GridLayout>

 

많은 분들이 테이블레이아웃에서 그리드레이아웃으로 변경하면서 10개의 숫자 버튼이 화면 밖으로 튀어나갔을 겁니다.

 

저도 구글에 많이 검색하다보니 결국 버튼마다 dp값으로 크기를 정해주어야 설정이 되더군요.

 

따라서 버튼 10개에 dp값을 다 설정해주어야 합니다. 그렇지 않으면 여전히 버튼은 화면 밖으로 튀어나가 있을 겁니다.

 

activity_main.xml 동작 화면

 

MainActivity.java

package com.cookandroid.project5_2;

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;
    TextView textResult;
    String num1, num2;
    Integer result;
    Button[] numButtons=new Button[10];
    Integer[] numBtnIDs={R.id.BtnNum0, R.id.BtnNum1, R.id.BtnNum2, R.id.BtnNum3, R.id.BtnNum4, R.id.BtnNum5, R.id.BtnNum6, R.id.BtnNum7, R.id.BtnNum8, R.id.BtnNum9};
    int i;

    @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);
        textResult = (TextView) findViewById(R.id.TextResult);

        btnAdd.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View arg0, MotionEvent arg1) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();
                result = Integer.parseInt(num1) + Integer.parseInt(num2);
                textResult.setText("계산 결과 : " + result.toString());
                return false;
            }
        });

        btnSub.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View arg0, MotionEvent arg1) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();
                result = Integer.parseInt(num1) - Integer.parseInt(num2);
                textResult.setText("계산 결과 : " + result.toString());
                return false;
            }
        });

        btnMul.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View arg0, MotionEvent arg1) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();
                result = Integer.parseInt(num1) * Integer.parseInt(num2);
                textResult.setText("계산 결과 : " + result.toString());
                return false;
            }
        });

        btnDiv.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View arg0, MotionEvent arg1) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();
                result = Integer.parseInt(num1) / Integer.parseInt(num2);
                textResult.setText("계산 결과 : " + result.toString());
                return false;
            }
        });

        for (i = 0; i < numBtnIDs.length; i++)
        {
            numButtons[i] = (Button) findViewById(numBtnIDs[i]);
        }
        for (i = 0; i < numBtnIDs.length; i++) {
            final int index;
            index = i;

        numButtons[index].setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (edit1.isFocused() == true) {
                    num1 = edit1.getText().toString()
                            + numButtons[index].getText().toString();
                    edit1.setText(num1);
                } else if (edit2.isFocused() == true) {
                    num2 = edit2.getText().toString()
                            + numButtons[index].getText().toString();
                } else {
                    Toast.makeText(getApplicationContext(), "먼저 에디트텍스트를 입력하세요.", Toast.LENGTH_SHORT).show();
                }
            }
        });
        }
    }
}

 

java 파일은 앞의 실습과 동일합니다.

 

Android Studio AVD 실행 화면

어플리케이션 build 결과

 

728x90
반응형

"); wcs_do();