본문 바로가기
Programming/안드로이드스튜디오

안드로이드 앱만들기_2STEP : 계산기 2탄

by 공부합시다홍아 2020. 3. 5.

이 소스는 유튜버 및 블로거 '코딩발전소''님의 계산기 앱만들기라는 영상을 따라하며 만든 자료입니다. 

 

activity_main.xml

<?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"
tools:context=".MainActivity"
android:orientation="vertical"
android:weightSum="100">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="20"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="0"
android:textSize="50sp"
android:gravity="center_vertical|right"
android:padding="5dp"
android:layout_margin="10dp"
android:id="@+id/result_text"
android:textColor="#666666"/>
</LinearLayout>

<TextView
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#000000"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"/>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="80"
android:orientation="vertical"
android:weightSum="100"
android:padding="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="20"
android:orientation="horizontal"
android:weightSum="100">

<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="AC"
android:textSize="30sp"
android:id="@+id/all_clear_button"
android:onClick="buttonClick"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="CE"
android:textSize="30sp"
android:id="@+id/clear_entry_button"
android:onClick="buttonClick"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="BS"
android:textSize="30sp"
android:id="@+id/back_space_button"
android:onClick="buttonClick"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="/"
android:textSize="30sp"
android:backgroundTint="#ffffff"
android:id="@+id/division_button"
android:onClick="operatorClick"/>
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="20"
android:orientation="horizontal"
android:weightSum="100">

<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="7"
android:textSize="30sp"
android:id="@+id/num_7_button"
android:onClick="numButtonClick"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="8"
android:textSize="30sp"
android:id="@+id/num_8_button"
android:onClick="numButtonClick"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="9"
android:textSize="30sp"
android:id="@+id/num_9_button"
android:onClick="numButtonClick"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="*"
android:textSize="30sp"
android:backgroundTint="#ffffff"
android:id="@+id/multiply_button"
android:onClick="operatorClick"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="20"
android:orientation="horizontal"
android:weightSum="100">

<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="4"
android:textSize="30sp"
android:id="@+id/num_4_button"
android:onClick="numButtonClick"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="5"
android:textSize="30sp"
android:id="@+id/num_5_button"
android:onClick="numButtonClick"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="6"
android:textSize="30sp"
android:id="@+id/num_6_button"
android:onClick="numButtonClick"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="-"
android:textSize="30sp"
android:backgroundTint="#ffffff"
android:id="@+id/subtraction_button"
android:onClick="operatorClick"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="20"
android:orientation="horizontal"
android:weightSum="100">

<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="1"
android:textSize="30sp"
android:id="@+id/num_1_button"
android:onClick="numButtonClick"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="2"
android:textSize="30sp"
android:id="@+id/num_2_button"
android:onClick="numButtonClick"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="3"
android:textSize="30sp"
android:id="@+id/num_3_button"
android:onClick="numButtonClick"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="+"
android:textSize="30sp"
android:backgroundTint="#ffffff"
android:id="@+id/Addition_button"
android:onClick="operatorClick"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="20"
android:orientation="horizontal"
android:weightSum="100">

<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="50"
android:text="0"
android:textSize="30sp"
android:id="@+id/num_0_button"
android:onClick="numButtonClick"/>

<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="."
android:textSize="30sp"
android:id="@+id/decimal_button"
android:onClick="buttonClick"/>
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="25"
android:text="="
android:textSize="30sp"
android:backgroundTint="#ffffff"
android:id="@+id/result_button"
android:onClick="operatorClick"/>
</LinearLayout>
</LinearLayout>


</LinearLayout>

-----------------------------------------------------------------------------------------------------------------------------------MainActivity.java

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

final String CLEAR_INPUT_TEXT ="0";

boolean isFirstInput = true; // 입력 값이 처음 입력되는가를 확인
int resultNumber = 0; // 계산된 결과 값을 저장하는 변수
char operator = '+'; //문자형 값에는 작은 따음표로 표시, 입력된 연산자를 저장하는 변수


TextView resultText; //xml 파일에 resultText를 불러와 저장, 바로 초기화 불가, 밑에서 setcontentview 가 실행된 다음 초기화 가능
//색깔의 차이 , 주황색 기본변수[값 정해짐] , 파란색 : 레퍼런스 변수[ 값이 정해지지 않음, 주소값을 넣어주는 변수 ]


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
resultText = findViewById(R.id.result_text); // result_text라는 객체를 TextView로 저장

}

public void buttonClick(View view) {

switch (view.getId()){
case R.id.all_clear_button:
resultNumber = 0;
operator = '+';
setClearText(CLEAR_INPUT_TEXT);
break;

case R.id.clear_entry_button:
setClearText(CLEAR_INPUT_TEXT);
break;

case R.id.back_space_button:
if (resultText.getText().toString().length()>1){
String getResultText = resultText.getText().toString();
String subString = getResultText.substring(0, getResultText.length() - 1);
resultText.setText(subString);
} else {
setClearText(CLEAR_INPUT_TEXT);
}
break;

case R.id.decimal_button:
Log.e("buttonClick", "decimal_button 버튼이 클릭되었습니다");
break;

}
}

//입력된 숫자를 클리어 시켜주는 메소드
public void setClearText(String ClearText){
isFirstInput = true;
resultText.setTextColor(0xFF666666);
resultText.setText(ClearText);

}
// 0~9 버튼이 클릭되었을 때 실행되는 메소드
public void numButtonClick(View view){
Button getButton = findViewById(view.getId());
if (isFirstInput){
resultText.setTextColor(0xFF000000);
resultText.setText(getButton.getText().toString());
isFirstInput = false;
}else {
if (resultText.getText().toString().equals("0")){
Toast.makeText(getApplicationContext(), "0으로 시작하는 숫자는 없습니다.", Toast.LENGTH_SHORT).show();
setClearText(CLEAR_INPUT_TEXT);
}else {
resultText.append(getButton.getText().toString());
}
}
}

// 사칙연산을 해서 값을 반환해주는 메소드
public int intCal(int result, int lastNum, char operator){
if (operator == '+'){
result += lastNum;
}else if(operator == '='){
result -= lastNum;
}else if(operator == '/'){
result /= lastNum;
}else if(operator == '*'){
result *= lastNum;
}
return result;
}

//연산자가 클릭되었을 때 실행되는 메소드
public void operatorClick(View view){
Button getButton = findViewById(view.getId());

if(view.getId() == R.id.result_button){
if (isFirstInput){
resultNumber = 0;
operator = '+';
setClearText(CLEAR_INPUT_TEXT);
}else{
resultNumber = intCal(resultNumber,Integer.parseInt(resultText.getText().toString()), operator );
resultText.setText(resultNumber+" ");
isFirstInput = true;
}

}else {
if (isFirstInput){
operator = getButton.getText().toString().charAt(0);
}else{
int lastNum = Integer.parseInt(resultText.getText().toString());
resultNumber = intCal(resultNumber,lastNum, operator );
operator = getButton.getText().toString().charAt(0);
resultText.setText(resultNumber+" ");
isFirstInput = true;
}

}
}
}

---------------------------------------------

유투버 코딩 발전소 https://www.youtube.com/channel/UCNVN2esXeQgcxmnAPelIM1A

728x90