안드로이드 기초 & 계산기 예제
이 프로젝트는 Java로 진행하였습니다.
1. 안드로이드 기본 파일 구성요소
AndroidManifext.xml ,activity_main.xml, MainActivity.java, strings.xml 등등...
- java
(1) 프로젝트를 생성할 때 만들어 준 패키지가 하위폴더로 있다.
ex) com.example.fourbutton패키지는 con폴더 안에 example 폴더안에 fourbutton폴더가 있다.
(2) 패키지 안에 MainActivity.java로 된 메인 Java소스가 들어있다.
- manifests
(1) AndroidManifest.xml 파일이 들어있다.
(2) 앱의 여러가지 정보를 담고 있는 중요한 파일
(3) 필요에 따라 종종 수정하거나 변경
- res
(1) 앱 개발에 사용되는 이미지, 레이아웃, 문자열 등이 들어있음
(2) 이미지 파일은 drawable폴더에 넣음
(3) layout폴더에는 화면 구성하는 xml파일 넣음 / 기본적으로 activity_main.xml파일이 초기화면으로 지정
(4) values폴더에는 문자열 저장하는 strings.xml, 색상표 저장하는 colors.xml, 스타일 저장하는 themes.xml등이 있음
그 외에 필요에 따라서 다른 xml폴더 생성 가능
AndroidManifext : Android 빌드 도구, Android 운영체제 및 Google Play에 앱에 관한 필수 정보를 설명
activity_main : Application의 기본 화면 구성(태그언어)
MainActivity : Application의 동작을 구성(Java or Kotlin)
strings : Application에 문자열 사용 및 관리
2. AndroidManifext
모든 항목에 대한 설명은 생략하고 세 항목에서만 설명한다.
더 자세한 사항은에서 여기에서 확인한다.
android:icon : 앱의 icon 설정
android:label : 앱의 이름 설정
android:theme : 앱의 테마 설정
3. acivity_main
오른쪽 상단의 메뉴로 화면의 구성을 설정 가능합니다.
Design : 화면구성 부분만 보여준다.
split : 코드와 화면구성을 같이 보여준다.
code : 코드부분만 보여준다.
화면구성을 디자인 할땐 Design 화면에서 디자인 할 수 있지만
Code부분에서 코드로 디자인 하기를 권장한다고 한다.
4. MainActivity
MainActivity는 기본적으로 AppCompatActivity를 상속받는다.
MainActivity는 기본적으로 onCreate 함수를 오버라이딩으로 받아와 사용한다.
ex) java의 public static void main(String[] args)와 비슷한 역할
레이아웃을 생성하고 초기화 컴포넌트를 불러온다.
액티비티 생명주기에 있어서 중요한 함수이다.
setContentView는 화면 디자인을 xml파일로 정의해 놓은것을 불러온다.
해당 xml파일은 R클래스를 통해 불러올 수 있으며
R클래스에는 id, string, drawable로 구성되어있다.
예제 코드
calculator.xml
<?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">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Edit1"
android:layout_margin="10dp"
android:inputType="numberDecimal"
android:hint="숫자1"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Edit2"
android:layout_margin="10dp"
android:inputType="numberDecimal"
android:hint="숫자2"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/BtnAdd"
android:layout_margin="10dp"
android:text="더하기"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/BtnMinus"
android:layout_margin="10dp"
android:text="빼기"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/BtnMulti"
android:layout_margin="10dp"
android:text="곱하기"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/BtnDivide"
android:layout_margin="10dp"
android:text="나누기"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/BtnRem"
android:layout_margin="10dp"
android:text="나머지"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/TextResult"
android:textSize="30dp"
android:textColor="#FF0000"
android:text="계산 결과 : "/>
</LinearLayout>
strings.xml
<resources>
<string name="app_name">계산기 어플리케이션</string>
</resources>
MainActivity.java
package com.example.textexample;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.graphics.Typeface;
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;
import java.util.regex.Pattern;
public class MainActivity extends AppCompatActivity {
//double : 기본형 데이터타입 실수형 double
//Double : 참조형 데이터 타입 Double 클래스
Double num1, num2;
Double result;
//int : 기본형 데이터타입 정수형 int
//Integer : 참조형 데이터타입 Integer 클래스
Integer result2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calculator1);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.img);
EditText edText1,edText2;
Button btnAdd, btnMinus, btnMulti, btnDivide, btnRem;
TextView textView;
edText1 = (EditText)findViewById(R.id.Edit1);
edText2 = (EditText)findViewById(R.id.Edit2);
btnAdd = (Button)findViewById(R.id.BtnAdd);
btnMinus = (Button)findViewById(R.id.BtnMinus);
btnMulti = (Button)findViewById(R.id.BtnMulti);
btnDivide = (Button)findViewById(R.id.BtnDivide);
btnRem = (Button)findViewById(R.id.BtnRem);
textView = (TextView)findViewById(R.id.TextResult);
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(edText1.getText().length() == 0 || edText2.getText().length() == 0 ){
Toast.makeText(getApplicationContext(),"숫자를 입력해주세요",Toast.LENGTH_SHORT).show();
// Pattern.matches("^[0-9*$]*$",edText1.toString());
}else{
num1 = Double.parseDouble(edText1.getText().toString());
num2 = Double.parseDouble(edText2.getText().toString());
if((num1+num2)%(num1.intValue()+num2.intValue())==0){
result2 = num1.intValue()+num2.intValue();
textView.setText("계산 결과 : "+result2);
}else{
result = num1 + num2;
textView.setText("계산 결과 : "+Math.round(result*100)/100.0);
}
}
}
});
btnMinus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(edText1.getText().length() == 0 || edText2.getText().length() == 0 ){
Toast.makeText(getApplicationContext(),"숫자를 입력해주세요",Toast.LENGTH_SHORT).show();
}else {
num1 = Double.parseDouble(edText1.getText().toString());
num2 = Double.parseDouble(edText2.getText().toString());
if((num1+num2)%(num1.intValue()+num2.intValue())==0){
result2 = num1.intValue()-num2.intValue();
textView.setText("계산 결과 : "+result2);
}else {
result = num1 - num2;
textView.setText("계산 결과 : " + Math.round(result * 100) / 100.0);
}
}
}
});
btnMulti.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(edText1.getText().length() == 0 || edText2.getText().length() == 0 ){
Toast.makeText(getApplicationContext(),"숫자를 입력해주세요",Toast.LENGTH_SHORT).show();
}else {
num1 = Double.parseDouble(edText1.getText().toString());
num2 = Double.parseDouble(edText2.getText().toString());
if((num1+num2)%(num1.intValue()+num2.intValue())==0){
result2 = num1.intValue()*num2.intValue();
textView.setText("계산 결과 : "+result2);
}else {
result = num1 * num2;
textView.setText("계산 결과 : " + Math.round(result * 100) / 100.0);
}
}
}
});
btnDivide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(edText1.getText().length() == 0 || edText2.getText().length() == 0 ){
Toast.makeText(getApplicationContext(),"숫자를 입력해주세요",Toast.LENGTH_SHORT).show();
}else {
num1 = Double.parseDouble(edText1.getText().toString());
num2 = Double.parseDouble(edText2.getText().toString());
if (num2 > 0) {
result = num1 / num2;
if(result%result.intValue() == 0){
textView.setText("계산 결과 : "+result.intValue());
}else{
textView.setText("계산 결과 : "+Math.round(result*100)/100.0);
}
} else {
Toast.makeText(getApplicationContext(), "0으로 나눌 수 없습니다!", Toast.LENGTH_SHORT).show();
textView.setText("계산 결과 : ");
}
}
}
});
btnRem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(edText1.getText().length() == 0 || edText2.getText().length() == 0 ){
Toast.makeText(getApplicationContext(),"숫자를 입력해주세요",Toast.LENGTH_SHORT).show();
}else {
num1 = Double.parseDouble(edText1.getText().toString());
num2 = Double.parseDouble(edText2.getText().toString());
if (num2 > 0) {
result = num1 % num2;
if(result%result.intValue() == 0){
textView.setText("계산 결과 : "+result.intValue());
}else{
textView.setText("계산 결과 : "+result);
}
} else {
Toast.makeText(getApplicationContext(), "0으로 나눌 수 없습니다!", Toast.LENGTH_SHORT).show();
textView.setText("계산 결과 : ");
}
}
}
});
}
}
실행결과
-메인화면
-연산 결과가 정수일때 정수로 출력
-연산 결과가 실수일 땐 실수로 출력
-0으로 나누기 방지
-숫자 외 다른문자 입력방지
-Null값 방지