마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 계산기 어플 버튼 충돌

0 추천
계산기 어플을 만드는 중인데 가로 세로를 다른 액티비티로 만들었습니다. 그런데 가로 방향의 액티비티에 있는 버튼을 활성화 시키면 충돌이 일어나서 앱에 못 들어갑니다. 이 문제를 어떻게 해야 할까요?

 

 

 

또 가로 세로를 센서로 인식해서 전환하는데 세로에서 가로로 전환했다가 다시 세로로 전환하면 버튼을 인식하지 못하는 현상도 있습니다
오무 (140 포인트) 님이 2022년 5월 29일 질문
아마도 레이아웃의 차이로 인해 디바이스 회전시 특정 view가 존재하지 않은듯 추측이 되는데, 에러로그와 관련된 코드, 레이아웃을 올려보세요.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1.5"
        android:orientation="vertical">

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">

            <TextView
                android:id="@+id/first_textView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_margin="10dp"
                android:text=""
                android:textSize="30dp" />
        </ScrollView>

        <TextView
            android:id="@+id/second_textView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="10dp"
            android:layout_weight="2"
            android:text=""
            android:textSize="30dp" />

    </LinearLayout>

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:columnCount="4"
        android:orientation="horizontal"
        android:rowCount="5">

        <Button
            android:id="@+id/clear"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="C"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/bracket"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="( )"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/percent"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="%"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/div"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="÷"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num7"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="7"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num8"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="8"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num9"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="9"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/mul"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="X"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num4"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="4"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num5"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="5"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num6"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="6"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/sub"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="-"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num1"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="1"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num2"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="2"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num3"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="3"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/add"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="+"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/delete"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="delete"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num0"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="0"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/dot"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="."
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/equal"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="="
            android:backgroundTint="#3EBAB4"/>

    </GridLayout>
</LinearLayout>

이게 세로 방향이고
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">

        <TextView
            android:id="@+id/thirdTxtView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text=""
            android:gravity="right"
            android:textSize="40dp" />
    </LinearLayout>

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="5
"
        android:columnCount="7"
        android:rowCount="5">

        <Button
            android:id="@+id/guideBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="0"
            android:layout_column="0"
            android:layout_columnSpan="3"
            android:layout_gravity="fill_horizontal"
            android:background="@drawable/button"
            android:layout_margin="2dp"
            android:text="I:이자로 낸 금액 P:원금 T:관련기간 R:이자율(소수점)"
            android:textSize="8dp"/>

        <Button
            android:id="@+id/clearBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="0"
            android:layout_column="3"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="C" />
        <Button
            android:id="@+id/plmaBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="0"
            android:layout_column="4"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="+/-" />

        <Button
            android:id="@+id/percentBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="0"
            android:layout_column="5"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="%" />
        <Button
            android:id="@+id/divBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="0"
            android:layout_column="6"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="/" />

        <Button
            android:id="@+id/ijayulBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="1"
            android:layout_column="0"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="이자율" />
        <Button
            android:id="@+id/ijaBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="1"
            android:layout_column="1"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="I/PT = R" />
        <Button
            android:id="@+id/jegobBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="1"
            android:layout_column="2"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="^"/>
        <Button
            android:id="@+id/btn7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="1"
            android:layout_column="3"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="7" />

        <Button
            android:id="@+id/btn8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="1"
            android:layout_column="4"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="8" />

        <Button
            android:id="@+id/btn9"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="1"
            android:layout_column="5"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="9" />
        <Button
            android:id="@+id/mulBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="1"
            android:layout_column="6"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="X" />
<Button
            android:id="@+id/bockyulBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="2"
            android:layout_column="0"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="복리" />
        <Button
            android:id="@+id/bockBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="2"
            android:layout_column="1"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="P(1+I)^N" />
        <Button
            android:id="@+id/deleteBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="2"
            android:layout_column="2"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="delete"/>

        <Button
            android:id="@+id/btn4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="2"
            android:layout_column="3"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="4" />
        <Button
            android:id="@+id/btn5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="2"
            android:layout_column="4"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="5" />

        <Button
            android:id="@+id/btn6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="2"
            android:layout_column="5"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="6" />
        <Button
            android:id="@+id/subBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="2"
            android:layout_column="6"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="-" />
        <Button
            android:id="@+id/fourdaBtn"
            android:layout_width="wrap_content"
            android:layout_height="100dp"
            android:layout_row="3"
            android:layout_column="0"
            android:layout_rowSpan="2"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="4대보험"/>

        <Button
            android:id="@+id/kuckBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="3"
            android:layout_column="1"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:layout_gravity="fill_horizontal"
            android:background="@drawable/button"
            android:text="국민연금" />
        <Button
            android:id="@+id/gunBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="3"
            android:layout_column="2"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="건강보험" />

        <Button
            android:id="@+id/btn1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="3"
            android:layout_column="3"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="1" />
        <Button
            android:id="@+id/btn2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="3"
            android:layout_column="4"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="2" />

        <Button
            android:id="@+id/btn3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="3"
            android:layout_column="5"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="3" />
        <Button
            android:id="@+id/addBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="3"
            android:layout_column="6"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="+" />
        <Button
            android:id="@+id/goBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="4"
            android:layout_column="1"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="고용보험" />

        <Button
            android:id="@+id/jangBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="4"
            android:layout_column="2"
            android:layout_columnWeight="1"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="장기요양" />
        <Button
            android:id="@+id/bracketBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="4"
            android:layout_column="3"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="()"/>
        <Button
            android:id="@+id/btn0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="4"
            android:layout_column="4"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="0" />

        <Button
            android:id="@+id/dotBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="4"
            android:layout_column="5"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="." />
        <Button
            android:id="@+id/equalBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_row="4"
            android:layout_column="6"
            android:layout_margin="2dp"
            android:background="@drawable/button"
            android:text="=" />
    </GridLayout>
</LinearLayout>
여기까지가 가로 방향입니다.
package com.cookandroid.lab6;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    CalculateHelper calculateHelper;

    boolean isDot, isBracket, isPreview, isPreview1;

    TextView textView, textView2, thirdTxtView;

    int size;

    String result, number;

    Button  num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, add, sub, mul, div, clear, bracket, percent,
            delete, dot, equal, clearBtn, plmaBtn, percentBtn, divBtn, mulBtn, subBtn, addBtn, dotBtn, equalBtn, guideBtn,
            ijayulBtn, ijaBtn, bockyulBtn, bockBtn, fourdaBtn, kuckBtn, gunBtn, goBtn, jangBtn, jegobBtn, bracketBtn,
            deleteBtn, btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9;

    double d1, result1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

        setContentView(R.layout.activity_main);

 

        calculateHelper = new CalculateHelper();

        size = 0;
        int number = 25;
        int t = String.valueOf(Math.sqrt(number)).length();
        Log.d("test", "" + t + " ? " + String.valueOf(Math.sqrt(number)));

        isPreview = false;
        isPreview1 = false;
        isBracket = false;
        isDot = false;

        int[][] test = new int[5][4];
        setButton();
        setTextView();
    }
private void setButton() {
        btn0 = (Button) findViewById(R.id.btn0);
        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
        btn3 = (Button) findViewById(R.id.btn3);
        btn4 = (Button) findViewById(R.id.btn4);
        btn5 = (Button) findViewById(R.id.btn5);
        btn6 = (Button) findViewById(R.id.btn6);
        btn7 = (Button) findViewById(R.id.btn7);
        btn8 = (Button) findViewById(R.id.btn8);
        btn9 = (Button) findViewById(R.id.btn9);

        num0 = (Button) findViewById(R.id.num0);
        num1 = (Button) findViewById(R.id.num1);
        num2 = (Button) findViewById(R.id.num2);
        num3 = (Button) findViewById(R.id.num3);
        num4 = (Button) findViewById(R.id.num4);
        num5 = (Button) findViewById(R.id.num5);
        num6 = (Button) findViewById(R.id.num6);
        num7 = (Button) findViewById(R.id.num7);
        num8 = (Button) findViewById(R.id.num8);
        num9 = (Button) findViewById(R.id.num9);

        clearBtn = (Button) findViewById(R.id.clearBtn);
        plmaBtn = (Button) findViewById(R.id.plmaBtn);
        percentBtn = (Button) findViewById(R.id.percentBtn);
        divBtn = (Button) findViewById(R.id.divBtn);
        mulBtn = (Button) findViewById(R.id.mulBtn);
        subBtn = (Button) findViewById(R.id.subBtn);
        addBtn = (Button) findViewById(R.id.addBtn);
        dotBtn = (Button) findViewById(R.id.dotBtn);
        equalBtn = (Button) findViewById(R.id.equalBtn);
        ijayulBtn = (Button) findViewById(R.id.ijayulBtn);
        ijaBtn = (Button) findViewById(R.id.ijaBtn);
        bockyulBtn = (Button) findViewById(R.id.bockyulBtn);
        bockBtn = (Button) findViewById(R.id.bockBtn);
        fourdaBtn = (Button) findViewById(R.id.fourdaBtn);
        kuckBtn = (Button) findViewById(R.id.kuckBtn);
        goBtn = (Button) findViewById(R.id.goBtn);
        gunBtn = (Button) findViewById(R.id.gunBtn);
        jangBtn = (Button) findViewById(R.id.jangBtn);
        guideBtn = (Button) findViewById(R.id.guideBtn);
        jegobBtn = (Button) findViewById(R.id.jegobBtn);
        bracketBtn = (Button) findViewById(R.id.bracketBtn);
        deleteBtn = (Button) findViewById(R.id.deleteBtn);

        add = findViewById(R.id.add);
        sub = findViewById(R.id.sub);
        mul = findViewById(R.id.mul);
        div = findViewById(R.id.div);
        clear = findViewById(R.id.clear);
        bracket = findViewById(R.id.bracket);
        percent = findViewById(R.id.percent);
        delete = findViewById(R.id.delete);
        dot = findViewById(R.id.dot);
        equal = findViewById(R.id.equal);

        num0.setOnClickListener(numClickListener);
        num1.setOnClickListener(numClickListener);
        num2.setOnClickListener(numClickListener);
        num3.setOnClickListener(numClickListener);
        num4.setOnClickListener(numClickListener);
        num5.setOnClickListener(numClickListener);
        num6.setOnClickListener(numClickListener);
        num7.setOnClickListener(numClickListener);
        num8.setOnClickListener(numClickListener);
        num9.setOnClickListener(numClickListener);

        btn0.setOnClickListener(numClickListener2);
        btn1.setOnClickListener(numClickListener2);
        btn2.setOnClickListener(numClickListener2);
        btn3.setOnClickListener(numClickListener2);
        btn4.setOnClickListener(numClickListener2);
        btn5.setOnClickListener(numClickListener2);
        btn6.setOnClickListener(numClickListener2);
        btn7.setOnClickListener(numClickListener2);
        btn8.setOnClickListener(numClickListener2);
        btn9.setOnClickListener(numClickListener2);

        addBtn.setOnClickListener(markClickListener2);
        subBtn.setOnClickListener(markClickListener2);
        mulBtn.setOnClickListener(markClickListener2);
        divBtn.setOnClickListener(markClickListener2);
        percentBtn.setOnClickListener(markClickListener2);
        clearBtn.setOnClickListener(markClickListener2);
        plmaBtn.setOnClickListener(markClickListener2);
        dotBtn.setOnClickListener(markClickListener2);
        deleteBtn.setOnClickListener(markClickListener2);
        equalBtn.setOnClickListener(markClickListener2);

        ijayulBtn.setOnClickListener(markClickListener2);
        ijaBtn.setOnClickListener(markClickListener2);
        bockyulBtn.setOnClickListener(markClickListener2);
        bockBtn.setOnClickListener(markClickListener2);
        fourdaBtn.setOnClickListener(markClickListener2);
        kuckBtn.setOnClickListener(markClickListener2);
        gunBtn.setOnClickListener(markClickListener2);
        goBtn.setOnClickListener(markClickListener2);
        jangBtn.setOnClickListener(markClickListener2);
        guideBtn.setOnClickListener(markClickListener2);
        bracketBtn.setOnClickListener(markClickListener2);
        jegobBtn.setOnClickListener(markClickListener2);

        add.setOnClickListener(markClickListener);
        sub.setOnClickListener(markClickListener);
        mul.setOnClickListener(markClickListener);
        div.setOnClickListener(markClickListener);
        clear.setOnClickListener(markClickListener);
        bracket.setOnClickListener(markClickListener);
        percent.setOnClickListener(markClickListener);
        delete.setOnClickListener(markClickListener);
        dot.setOnClickListener(markClickListener);
        equal.setOnClickListener(markClickListener);
    }
private Button.OnClickListener numClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.num0:
                    textView.append("0");
                    break;
                case R.id.num1:
                    textView.append("1");
                    break;
                case R.id.num2:
                    textView.append("2");
                    break;
                case R.id.num3:
                    textView.append("3");
                    break;
                case R.id.num4:
                    textView.append("4");
                    break;
                case R.id.num5:
                    textView.append("5");
                    break;
                case R.id.num6:
                    textView.append("6");
                    break;
                case R.id.num7:
                    textView.append("7");
                    break;
                case R.id.num8:
                    textView.append("8");
                    break;
                case R.id.num9:
                    textView.append("9");
                    break;
            }

            preview();
        }
    };

    private Button.OnClickListener numClickListener2 = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.btn0:
                    thirdTxtView.append("0");
                    break;
                case R.id.btn1:
                    thirdTxtView.append("1");
                    break;
                case R.id.btn2:
                    thirdTxtView.append("2");
                    break;
                case R.id.btn3:
                    thirdTxtView.append("3");
                    break;
                case R.id.btn4:
                    thirdTxtView.append("4");
                    break;
                case R.id.btn5:
                    thirdTxtView.append("5");
                    break;
                case R.id.btn6:
                    thirdTxtView.append("6");
                    break;
                case R.id.btn7:
                    thirdTxtView.append("7");
                    break;
                case R.id.btn8:
                    thirdTxtView.append("8");
                    break;
                case R.id.btn9:
                    thirdTxtView.append("9");
                    break;
            }
            preview1();
        }
    };
private Button.OnClickListener markClickListener2 = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);
            switch (view.getId()) {
                case R.id.addBtn:
                    thirdTxtView.append(" + ");
                    isPreview1 = true;
                    break;
                case R.id.subBtn:
                    thirdTxtView.append(" - ");
                    isPreview1 = true;
                    break;
                case R.id.mulBtn:
                    thirdTxtView.append(" * ");
                    isPreview1 = true;
                    break;
                case R.id.divBtn:
                    thirdTxtView.append(" / ");
                    isPreview1 = true;
                    break;
                case R.id.percentBtn:
                    number = thirdTxtView.getText().toString();
                    d1 = Double.parseDouble(number);
                    result1 = d1 / 100.0;
                    thirdTxtView.setText(String.valueOf(result1));
                    break;
                case R.id.deleteBtn:
                    size = thirdTxtView.getText().length();

                    if (size != 0)
                        thirdTxtView.setText(thirdTxtView.getText().toString().substring(0, size - 1));

                    if (size > 1) {
                        if (calculateHelper.checkNumber(textView.getText().toString().substring(size - 2)))
                            preview();
                        else {
                            isPreview = false;
                            textView2.setText("");
                        }
                    }

                case R.id.dotBtn:
                    thirdTxtView.append(".");
                    isDot = true;
                    break;
                case R.id.clearBtn:
                    thirdTxtView.setText("");
                    calculateHelper = new CalculateHelper();

                    isPreview1 = false;

                    break;
                case R.id.plmaBtn:
                    if ((Double.parseDouble(thirdTxtView.getText().toString())) - ((int) Double.parseDouble(thirdTxtView.getText()
                            .toString())) == 0.0) {
                        thirdTxtView.setText("" + (Integer.parseInt(thirdTxtView.getText().toString()) * -1));
                    } else {
                        thirdTxtView.setText("" + (Double.parseDouble(thirdTxtView.getText().toString()) * -1));
                    }
                    break;
                case R.id.bracketBtn:
                    if (!isBracket) {
                        thirdTxtView.append("( ");
                        isBracket = true;
                    } else {
                        thirdTxtView.append(" )");
                        isBracket = false;
                    }
                    isPreview1 = true;
                    break;

                case R.id.jegobBtn:
                    thirdTxtView.append("^");
                    isPreview1 = true;
                    break;
                case R.id.equalBtn:
                    result = thirdTxtView.getText().toString();
                    StringBuffer infix = new StringBuffer(result);
                    PostfixEvaluator PE = new PostfixEvaluator(infix);
                    String result = PE.evaluatePostfixExpression();
                    thirdTxtView.setText(result);

                    thirdTxtView.setText("");
                    isDot = false;
                    isPreview1 = false;
                    break;
                case R.id.guideBtn:
                    dlg.setTitle("도움말");
                    dlg.setMessage("                이 버튼은 공식 속 알파벳에 대한 \n" +
                            "                           정보를 나타냅니다.");
                    dlg.setPositiveButton("확인", null);
                    dlg.show();
                    break;
                case R.id.ijayulBtn:
                    dlg.setTitle("도움말");
                    dlg.setMessage("이자율 계산을 원하시면 오른쪽의 'I/PT = R' 버튼을 이용하세요.");
                    dlg.setPositiveButton("확인", null);
                    dlg.show();
                    break;
                case R.id.ijaBtn:
                    dlg.setTitle("도움말");
                    dlg.setMessage("이자로 낸 금액 / 원금 / 기간을 하시면 됩니다. ");
                    dlg.setPositiveButton("확인", null);
                    dlg.show();
                    break;

                case R.id.bockyulBtn:
                    dlg.setTitle("도움말");
                    dlg.setMessage("복리 계산을 원하시면 오른쪽의 'P(1+I)ⁿ' 버튼을 이용하세요.");
                    dlg.setPositiveButton("확인", null);
                    dlg.show();
                    break;

                case R.id.bockBtn:
                    dlg.setTitle("도움말");
                    dlg.setMessage("원금 * (1+이자율)^기간을 하시면 됩니다.");
                    dlg.setPositiveButton("확인", null);
                    dlg.show();
                    break;

                case R.id.fourdaBtn:
                    dlg.setTitle("도움말");
                    dlg.setMessage("      급여를 입력하고 4대보험 항목 중 계산하고자\n " +
                            "             하는 항목을 오른쪽 4개의 버튼에서\n                                    선택하세요.\n" +
                            "               [2022년 5월 기준 - 근로자부담액]\n\n" +
                            "                          국민연금 = 급여 X 4.5%\n" +
                            "                        건강보험 = 급여 X 3.495%\n" +
                            "                       고용보험 = 실업급여 X 0.8%\n" +
                            "                   장기요양 = 건강보험료 X 6.135%");
                    dlg.setPositiveButton("확인", null);
                    dlg.show();
                    break;
                case R.id.kuckBtn:
                    number = thirdTxtView.getText().toString();
                    d1 = Double.parseDouble(number);
                    result1 = d1 * 4.5 / 100.0;
                    thirdTxtView.setText(String.valueOf(result1));
                    break;
                case R.id.gunBtn:
                    number = thirdTxtView.getText().toString();
                    d1 = Double.parseDouble(number);
                    result1 = d1 * 3.495 / 100.0;
                    thirdTxtView.setText(String.valueOf(result1));
                    break;
                case R.id.goBtn:
                    number = thirdTxtView.getText().toString();
                    d1 = Double.parseDouble(number);
                    result1 = d1 * 0.8 / 100.0;
                    thirdTxtView.setText(String.valueOf(result1));
                    break;
                case R.id.jangBtn:
                    number = thirdTxtView.getText().toString();
                    d1 = Double.parseDouble(number);
                    result1 = d1 * 6.135 / 100.0;
                    thirdTxtView.setText(String.valueOf(result1));
                    break;
            }
        }
    };
private Button.OnClickListener markClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.add:
                    textView.append(" + ");
                    isPreview = true;
                    break;
                case R.id.sub:
                    textView.append(" - ");
                    isPreview = true;
                    break;
                case R.id.mul:
                    textView.append(" * ");
                    isPreview = true;
                    break;
                case R.id.div:
                    textView.append(" / ");
                    isPreview = true;
                    break;
                case R.id.percent:
                    textView.append(" % ");
                    isPreview = true;
                    break;
                case R.id.clear:
                    textView.setText("");
                    textView2.setText("");

                    calculateHelper = new CalculateHelper();

                    isPreview = false;

                    break;
                case R.id.bracket:
                    if (!isBracket) {
                        textView.append("( ");
                        isBracket = true;
                    } else {
                        textView.append(" )");
                        isBracket = false;
                    }

                    isPreview = true;

                    break;
                case R.id.delete:
                    size = textView.getText().length();

                    if (size != 0)
                        textView.setText(textView.getText().toString().substring(0, size - 1));

                    if (size > 1) {
                        if (calculateHelper.checkNumber(textView.getText().toString().substring(size - 2)))
                            preview();
                        else {
                            isPreview = false;
                            textView2.setText("");
                        }
                    }

                    break;
                case R.id.dot:
                    textView.append(".");
                    isDot = true;
                    break;
                case R.id.equal:
                    result = textView.getText().toString();
                    double r = calculateHelper.process(result);

                    if (!isDot)
                        textView.setText(String.valueOf((int) r));
                    else
                        textView.setText(String.valueOf(r));

                    textView2.setText("");
                    isDot = false;
                    isPreview = false;
                    break;
            }
        }
    };

    private void preview1() {
        if (isPreview) {
            result = thirdTxtView.getText().toString();
            StringBuffer infix = new StringBuffer(result);
            PostfixEvaluator PE = new PostfixEvaluator(infix);
            String result = PE.evaluatePostfixExpression();
            this.thirdTxtView.setText(result);
        }
    }

    private void preview() {
        if (isPreview) {
            result = textView.getText().toString();
            double r = calculateHelper.process(result);

            if (!isDot)
                textView2.setText(String.valueOf((int) r));
            else
                textView2.setText(String.valueOf(r));
        }
    }

    private void setTextView() {
        textView = findViewById(R.id.first_textView);
        textView2 = findViewById(R.id.second_textView);
        thirdTxtView = findViewById(R.id.thirdTxtView);

    }

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onStop() {
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        setContentView(R.layout.activity_main);
        super.onConfigurationChanged(newConfig);

    }
}

이게 MainActivity.java 코드이고요

여기서 btn이라고 붙은 것들이 없어야 앱이 제대로 작동합니다

6개의 답변

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1.5"
        android:orientation="vertical">

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">

            <TextView
                android:id="@+id/first_textView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_margin="10dp"
                android:text=""
                android:textSize="30dp" />
        </ScrollView>

        <TextView
            android:id="@+id/second_textView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="10dp"
            android:layout_weight="2"
            android:text=""
            android:textSize="30dp" />

    </LinearLayout>

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:columnCount="4"
        android:orientation="horizontal"
        android:rowCount="5">

        <Button
            android:id="@+id/clear"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="C"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/bracket"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="( )"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/percent"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="%"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/div"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="÷"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num7"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="7"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num8"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="8"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num9"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="9"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/mul"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="X"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num4"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="4"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num5"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="5"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num6"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="6"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/sub"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="-"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num1"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="1"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num2"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="2"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num3"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="3"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/add"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="+"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/delete"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="delete"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/num0"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="0"
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/dot"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="."
            android:backgroundTint="#3EBAB4"/>

        <Button
            android:id="@+id/equal"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_margin="-5dp"
            android:text="="
            android:backgroundTint="#3EBAB4"/>

    </GridLayout>
</LinearLayout>

이게 세로 방향이고
오무 님이 2022년 5월 29일 답변
0 추천

앱이 크래시되는 이유는 간단합니다.

 ijayulBtn, ijaBtn, bockyulBtn, bockBtn, fourdaBtn, kuckBtn, gunBtn, goBtn, jangBtn, jegobBtn

위의 버튼들은 landscape 모드일 때만 존재할 뿐 portrait모드일 때는 존재하지 않습니다. 따라서

ijayulBtn,setOnClickListnere(...)

위와 같이  Null인 뷰에 접근하면  NullPointerException이 나겠죠. 당연히 Null이 아닐 때만 동작하도록 처리를 해야 겠죠.

제일 간단한 방법은 res/values/strings.xml과 res/values-land/strings.xml에 다음과 같이 bool 리소스를 하나 선언한 다음

// res/values/strings.xml
<resources>
    <bool name="isLandscape">false</bool>
</resources>

// res/values-land/strings.xml
<resources>
    <bool name="isLandscape">true</bool>
</resources>

액티비티에서 아래처럼 해당 값을 읽어서

private boolean isLandscape = getResources().getBoolean(R.bool.isLandscape);

isLandscape == true 일 때만 landsacpe 관련 코드를 실행하도록 하면 되겠죠.

다른 접근방법으로는 layout을 portrait, landscape모두 동일한 뷰를 가지도록 하고 디바이스 모드에 따라서 visibility만 바꾸도록 처리하셔도 될 것 같습니다. 이게 처리는 더 간단해 보입니다.

landscape에만 사용되는 레이아웃의 최상이 레이아웃에 아래 링크처럼 integer resource 를 설정해서 자동으로 visibility 설정이 되도록 해주실 수 있을 것 같습니다.

https://stackoverflow.com/questions/9751881/controlling-view-visibility-from-a-resources

 

프레그먼트를 두개 사용하는 것도 해볼 수 있는 옵션이 될 것 같습니다. 이 경우 코드는 조금 더 많아지긴 하겠네요.

spark (224,800 포인트) 님이 2022년 5월 29일 답변
0 추천

님이 올리신 레이아웃을 최대한 재활용해 portrait 레이아웃 하나로 두개의 모드를 모두 지원할 수 있도록 간단히 수정을 해봤습니다.

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">

        <TextView
            android:id="@+id/thirdTxtView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="right"
            android:text=""
            android:textSize="40dp" />
    </LinearLayout>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="5"
        android:orientation="horizontal">

        <include
            android:id="@+id/include_left"
            layout="@layout/layout_calculator_left"
            android:layout_width="0dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintEnd_toStartOf="@id/include_right"
            app:layout_constraintBottom_toBottomOf="parent"
            android:visibility="@integer/calculator_landscape_visibility"
            android:layout_height="match_parent" />

        <include
            android:id="@+id/include_right"
            layout="@layout/layout_calculator_right"
            android:layout_width="0dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toEndOf="@id/include_left"
            app:layout_constraintBottom_toBottomOf="parent"  
            android:layout_height="match_parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>

디테일한 부분은 참고하셔서 수정하시면 될 것 같은데요. integer 리소스 만드는 법은 다른 답글에 있으니 참고하시구요.

spark (224,800 포인트) 님이 2022년 5월 29일 답변
spark님이 2022년 5월 29일 수정
0 추천

layout_calculator_left.xml

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="3"
    android:rowCount="5">

    <Button
        android:id="@+id/guideBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="0"
        android:layout_column="0"
        android:layout_columnSpan="3"
        android:layout_rowWeight="1"
        android:layout_gravity="fill_horizontal"
        android:layout_margin="2dp"
        android:text="I:이자로 낸 금액 P:원금 T:관련기간 R:이자율(소수점)"
        android:textSize="8dp" />

    <Button
        android:id="@+id/ijayulBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_rowWeight="1"
        android:layout_row="1"
        android:layout_column="0"
        android:layout_columnWeight="1"
        android:layout_margin="2dp"
        android:text="이자율" />

    <Button
        android:id="@+id/ijaBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_rowWeight="1"
        android:layout_row="1"
        android:layout_column="1"
        android:layout_columnWeight="1"
        android:layout_margin="2dp"
        android:text="I/PT = R" />

    <Button
        android:id="@+id/jegobBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_rowWeight="1"
        android:layout_row="1"
        android:layout_column="2"
        android:layout_columnWeight="1"
        android:layout_margin="2dp"
        android:text="^" />

    <Button
        android:id="@+id/bockyulBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_rowWeight="1"
        android:layout_row="2"
        android:layout_column="0"
        android:layout_columnWeight="1"
        android:layout_margin="2dp"
        android:text="복리" />

    <Button
        android:id="@+id/bockBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_rowWeight="1"
        android:layout_row="2"
        android:layout_column="1"
        android:layout_columnWeight="1"
        android:layout_margin="2dp"
        android:text="P(1+I)^N" />

    <Button
        android:id="@+id/deleteBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_rowWeight="1"
        android:layout_row="2"
        android:layout_column="2"
        android:layout_columnWeight="1"
        android:layout_margin="2dp"
        android:text="delete" />

    <Button
        android:id="@+id/fourdaBtn"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:layout_rowWeight="1"
        android:layout_row="3"
        android:layout_rowSpan="2"
        android:layout_column="0"
        android:layout_columnWeight="1"
        android:layout_margin="2dp"
        android:text="4대보험" />

    <Button
        android:id="@+id/kuckBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_rowWeight="1"
        android:layout_row="3"
        android:layout_column="1"
        android:layout_columnWeight="1"
        android:layout_gravity="fill_horizontal"
        android:layout_margin="2dp"
        android:text="국민연금" />

    <Button
        android:id="@+id/gunBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_rowWeight="1"
        android:layout_row="3"
        android:layout_column="2"
        android:layout_columnWeight="1"
        android:layout_margin="2dp"
        android:text="건강보험" />

    <Button
        android:id="@+id/goBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_rowWeight="1"
        android:layout_row="4"
        android:layout_column="1"
        android:layout_columnWeight="1"
        android:layout_margin="2dp"
        android:text="고용보험" />

    <Button
        android:id="@+id/jangBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_rowWeight="1"
        android:layout_row="4"
        android:layout_column="2"
        android:layout_columnWeight="1"
        android:layout_margin="2dp"
        android:text="장기요양" />

</GridLayout>
spark (224,800 포인트) 님이 2022년 5월 29일 답변
0 추천

layout_calculator_right.xml

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="4"
    android:rowCount="5">

    <Button
        android:id="@+id/clear"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="C" />

    <Button
        android:id="@+id/bracket"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="( )" />

    <Button
        android:id="@+id/percent"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="%" />

    <Button
        android:id="@+id/div"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="÷" />

    <Button
        android:id="@+id/num7"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="7" />

    <Button
        android:id="@+id/num8"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="8" />

    <Button
        android:id="@+id/num9"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="9" />

    <Button
        android:id="@+id/mul"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="X" />

    <Button
        android:id="@+id/num4"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="4" />

    <Button
        android:id="@+id/num5"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="5" />

    <Button
        android:id="@+id/num6"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="6" />

    <Button
        android:id="@+id/sub"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="-" />

    <Button
        android:id="@+id/num1"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="1" />

    <Button
        android:id="@+id/num2"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="2" />

    <Button
        android:id="@+id/num3"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="3" />

    <Button
        android:id="@+id/add"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="+" />

    <Button
        android:id="@+id/delete"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="delete" />

    <Button
        android:id="@+id/num0"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="0" />

    <Button
        android:id="@+id/dot"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="." />

    <Button
        android:id="@+id/equal"
        android:layout_rowWeight="1"
        android:layout_columnWeight="1"
        android:layout_margin="-5dp"
        android:backgroundTint="#3EBAB4"
        android:text="=" />
</GridLayout>
spark (224,800 포인트) 님이 2022년 5월 29일 답변
추가로 이정도로 반복적인 레이아웃이면 GridLayout만 그래도 두고 동적으로 버튼을 추가하는 방법도 고려해볼 수 있을 듯 합니다.
정말로 도와주셔서 감사합니다bb
private Button.OnClickListener numClickListener2 = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (isLandscape == true) {
                switch (view.getId()) {
                    case R.id.btn0:
                        thirdTxtView.append("0");
                        break;
                    case R.id.btn1:
                        thirdTxtView.append("1");
                        break;
                    case R.id.btn2:
                        thirdTxtView.append("2");
                        break;
                    case R.id.btn3:
                        thirdTxtView.append("3");
                        break;
                    case R.id.btn4:
                        thirdTxtView.append("4");
                        break;
                    case R.id.btn5:
                        thirdTxtView.append("5");
                        break;
                    case R.id.btn6:
                        thirdTxtView.append("6");
                        break;
                    case R.id.btn7:
                        thirdTxtView.append("7");
                        break;
                    case R.id.btn8:
                        thirdTxtView.append("8");
                        break;
                    case R.id.btn9:
                        thirdTxtView.append("9");
                        break;
                }
                preview1();
            }

        }
    };
제가 isLandscape로 해봤는데도 크래시가 나서요.
이렇게 하는 거 맞나요?
isLandscape 을 읽는 부분을 onCreate안에 위치시켜 보세요. 디바이스가 회전하게 되면 기본 동작은 액티비티를 destroy했다가 다시 생성하기 때문에 리소스를 읽어오는 부분은 액티비티가 생성되고 나서 읽는 게 맞을 것 같네요.

@Override
public void onCreate (Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(...);
      
     setupView();

     //if (activityRecreated(savedInstanceState)) {
         // 재생성시에 할 일         
    //}
}

private void setupView() {
    if (isLandscapeMode()) {
       setupLandscapeMode();
       return;
    }
    setupPortraitMode();
}

private boolean isLandscapeMode() {
    return getResources().getBoolean(R.bool.isLandscape);
}

 //Activity가 재생성되면 savedInstanceState에 값이 넘어 옴.
//private boolean activityRecreated(Bundle savedInstanceState) {
//    return savedInstanceState != null;
//}

그리고 landscape 모드에만 있는 뷰의 초기화(findViewById, onClickListener)도 landscape모드일 때만 하도록 하시면 될 것 같네요. 위의 코드처럼 메소드를 두어서 필요할 때 읽어오면 될 듯합니다.
방법을 알려주셨는데 어떻게 해야할지 감이 안 잡히네요;;
재생성시에 해야할 일이나 setupLandscapeMode();, setupPortraitMode();와 뷰의 초기화를 landscape모드일 때만 하는 방법을 모르겠어요
그건 처리가 필요할 경우 님이 원하는 로직을 넣을 수 있다는 예시를 든 거예요. 함수의 내부보다는 코드의 흐름이 어떻게 진행되는지 보여주기 위한 목적으로 보시면 됩니다.
포인트는 isLandscapeMode() 함수를 통해서 portrait/landscape 정보를 읽어오는 것과 거기에 따라 필요한 로직을 분기한다는 점입니다. 각각에 구체적으로 어떤 코드를 집어넣어야할 지는 님이 코드 작성자이므로 님이 결정하실 수 있는 사항입니다.
코드를 바로 작성하지 마시고 어떤 처리들이 필요한지 정리를 먼저 해보세요. 아래와 같은 형태로

화면이 가로모드인지 읽어들인다.
가로모드이면 가로모드용 뷰를 초기화한다.
 - 가로모드 뷰를 findViewById로 찾는다.
 - 가로모드 뷰의 ClickListener를 설정한다.
세로모드이면 세로모드용 뷰만 초기화한다.
  - 세로모드 뷰를 findViewById로 찾는다.
  - 세로모드 뷰의 ClickListener를 설정한다.
제가 이 방법이 어려워서 Intent를 이용했는데 이번엔 가로모드의 사칙연산이 안됩니다. 그런데 댓글이 안 올라가는데 왜 이러는지 아신가요?
님 레이아웃이 복잡해서 눈여겨 못봤는데, 가로 세로모드 레이아웃을 같이 사용하시려면 가로모드에 있는 ViewID를 세로모드에도 사용하셔야 해요. 예를 들면 가로모드에 숫자 1번 버튼이 num1정의되어 있으면 세로모드에서도 num1으로 동일한 ID부여하셔야 작업이 훨씬 쉬워져요.
0 추천

일단 가로, 세로 레이아웃에 같은 뷰가 들어있으면 ID 를 동일하게 맞추시구요. 아래처럼 초기화 하세요.

private void setupView() {
        setupCommonViews();

        boolean isLandscapeMode = isLandscape();
        if (!isLandscapeMode) setupPortraitViews();
        if (isLandscapeMode) setupLandscapeViews();
    }

    private void setupCommonViews() {
        textView = findViewById(R.id.first_textView);
        textView2 = findViewById(R.id.second_textView);
        thirdTxtView = findViewById(R.id.thirdTxtView);

        num0 = findViewById(R.id.num0);
        num1 = findViewById(R.id.num1);
        num2 = findViewById(R.id.num2);
        num3 = findViewById(R.id.num3);
        num4 = findViewById(R.id.num4);
        num5 = findViewById(R.id.num5);
        num6 = findViewById(R.id.num6);
        num7 = findViewById(R.id.num7);
        num8 = findViewById(R.id.num8);
        num9 = findViewById(R.id.num9);

        num0.setOnClickListener(numClickListener);
        num1.setOnClickListener(numClickListener);
        num2.setOnClickListener(numClickListener);
        num3.setOnClickListener(numClickListener);
        num4.setOnClickListener(numClickListener);
        num5.setOnClickListener(numClickListener);
        num6.setOnClickListener(numClickListener);
        num7.setOnClickListener(numClickListener);
        num8.setOnClickListener(numClickListener);
        num9.setOnClickListener(numClickListener);

        clear = findViewById(R.id.clear);
        bracket = findViewById(R.id.bracket);
        percent = findViewById(R.id.percent);
        dot = findViewById(R.id.dot);
        equal = findViewById(R.id.equal);

        clear.setOnClickListener(markClickListener);
        bracket.setOnClickListener(markClickListener);
        percent.setOnClickListener(markClickListener);
        dot.setOnClickListener(markClickListener);
        equal.setOnClickListener(markClickListener);

        add = findViewById(R.id.add);
        sub = findViewById(R.id.sub);
        mul = findViewById(R.id.mul);
        div = findViewById(R.id.div);

        add.setOnClickListener(markClickListener);
        sub.setOnClickListener(markClickListener);
        mul.setOnClickListener(markClickListener);
        div.setOnClickListener(markClickListener);
    }

    private void setupPortraitViews() {
        delete = findViewById(R.id.delete);
        delete.setOnClickListener(markClickListener);
    }

    private void setupLandscapeViews() {
        ijayulBtn = findViewById(R.id.ijayulBtn);
        ijaBtn = findViewById(R.id.ijaBtn);
        bockyulBtn = findViewById(R.id.bockyulBtn);
        bockBtn = findViewById(R.id.bockBtn);
        fourdaBtn = findViewById(R.id.fourdaBtn);
        kuckBtn = findViewById(R.id.kuckBtn);
        goBtn = findViewById(R.id.goBtn);
        gunBtn = findViewById(R.id.gunBtn);
        jangBtn = findViewById(R.id.jangBtn);
        guideBtn = findViewById(R.id.guideBtn);
        jegobBtn = findViewById(R.id.jegobBtn);

        ijayulBtn.setOnClickListener(markClickListener2);
        ijaBtn.setOnClickListener(markClickListener2);
        bockyulBtn.setOnClickListener(markClickListener2);
        bockBtn.setOnClickListener(markClickListener2);
        fourdaBtn.setOnClickListener(markClickListener2);
        kuckBtn.setOnClickListener(markClickListener2);
        gunBtn.setOnClickListener(markClickListener2);
        goBtn.setOnClickListener(markClickListener2);
        jangBtn.setOnClickListener(markClickListener2);
        guideBtn.setOnClickListener(markClickListener2);
        jegobBtn.setOnClickListener(markClickListener2);
    }

필요없는 변수는 없애시구요.

spark (224,800 포인트) 님이 2022년 6월 1일 답변
...