본문 바로가기
App/Android Java

Android_Java(2) - 안드로이드 기본사항

by SeleniumBindingProtein 2022. 2. 4.
728x90
반응형

1. View 클래스
    1) 안드로이드 화면에서 실제로 사용되는 것들은 모두 View 클래스 상속 받음
    2) 다른 말로 '위젯'이라고도 함 
        - (화면) 버튼 => 버튼 위젯
        - (코드) 버튼 => 버튼 클래스 
    3) 다른 위젯을 담을 수 있는 위젯 => 레이아웃이라고 함 
        - 레이아웃은 ViewGroup 클래스 아래 존재함 
        - 레이아웃도 크게 보면, 위제에 포함됨 
    4) XML 속성 
        - id 속성 
            - 뷰의 식별자 
            - java 코드에서 위젯에 접근할 때, id 속성에 지정한 아이디 사용 
        - 뷰의 위치와 크기
            - match_parent : 부모의 크기를 꽉 채움 
            - wrap_content : 뷰가 나타내는 내용물의 크기에 맞춤 
            - 숫자 : 정확히 지정함 
        - 화면에 보이기 속성
            - visible (0) : 디폴트 값 
            - invisible (1) : 표시되지 않음. 그러나 배치에서 공간을 차지함  
            - gone (2) : 완전히 숨겨짐  
        - padding 속성
            - 뷰의 경계와 뷰의 내용물 사이의 간격
        - margin 속성 
            - 자식 뷰 주위의 여백 
        - visibility 속성 ...
    5) 텍스트 뷰
        - <TextView>
    6) 에디트 텍스트 ...
        - <EditText>
            - inputType 속성
                - Text, textPassword, number, datetime, phone, ...
    7) 이미지 뷰
        - 아이콘과 같은 이미지들을 간단히 표시하는데 사용 

2. UI를 작성하는 절차 
    1) 뷰그룹을 생성함
    2) 필요한 뷰를 추가함
    3) 액티비티 화면으로 설정함 

 

3. 새로운 자바 가상 머신 ART
    1) 사용자는 달빅과 ART 중 하나 선택

4. 안드로이드 앱은 컴포넌트로 이루어짐
    1) 액티비티(Activity)
    2) 서비스(Service)
    3) 방송 수신자(Boardcast Receiver)
    4) 컨텐트 제공자(Content Provider)

5. 액티비티
    1) 사용자 인터페이스 화면을 가지는 하나의 작업
    2) 액티비티는 화면을 통하여 사용자와 상호작용하는 활동을 의미함 
    3) 액티비티들이 모여서 앱이 됨
        - 이메일 앱
            - 액티비티 #1 (수신된 이메일 리스트 표시)
            - 액티비티 #2 (이메일 작성)
            - 액티비티 #3 (수신된 이메일 내용 표시)
    4) protected void onCreate() {....}
        - 액티비티가 생성되는 순간에 딱 한번 호출
        - 모든 초기화와 사용 인터페이스 설정
        - 안드로이드 앱 실행 시작되는 곳 
            - 안드로이드에는 main()이 없음 
            - 액티비티별로 실행됨 
            - 액티비티 중 onCreate() 메서드가 가장 먼저 실행됨 
            

6. 앱의 비교
    1) PC 앱 
        - 앱A, 앱B 두 개의 서로 다른 앱의 코드를 사용할 수 없음 
    2) 안드로이드에서는 다른 앱의 컴포넌트를 사용할 수 있음 
        - 앱A(카메라 앱), 앱B(우리가 만든 앱) : 사진을 찍어서 반환함
    
7. 매니페이스 파일 
    1) 이 패키지에 포함된 컴포넌트 목록

8. 일반적인 앱 작성 절차
    1) 사용자 인터페이스 작성(XML)
        - 화면 디자인하는 단계 
    2) 자바 코드 작성(JAVA)
        - 이벤트 처리 등 
    3) 매니페스트 파일 작성(XML)
        - 앱을 구성하고 있는 컴포넌트들 기술, 권한 지정함 

9. UI 작성 절차
    1) 뷰그룹 생성함
    2) 필요한 뷰를 추가함
    3) 액티비티 화면으로 설정함 

10. 뷰
    1) View 클래스는 모든 뷰들의 부모 클래스임
    2) View 클래스가 가지고 있는 필드나 메소드는 모든 뷰에서 공통적으로 사용가능
        - id(뷰의 식별자)
        - match_parent(부모의 크기를 꽉 채움)
        - wrap_content(뷰가 나타내는 내용물의 크기에 맞춤)
        - 숫자(크기를 정확히 지정)
    3) 뷰의 크기 단위 
        - px(pixels) : 화면의 실제 픽셀을 나타냄 
        - dp(density-independent pixels) : 화면의 밀도가 160dpi 화면에서 하나의 물리적인 픽셀을 말함


//Caculator.app

- 계산 기능 구현

//MainActivity

package com.example.calculator;
//아래처럼 수정하시오.
//1) 터치를 클릭으로 변경
//2) 나머지값을 구하는 버튼을 추가
//3) 값을 입력하지 않고 버튼을 클릭시 오류 메시지를 토스트 메시지로 나타냄
//4) 실수값을 계산함
//5) 0으로 나누면 토스트 메시지를 나타내고 계산하지 않음

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;

import java.util.Objects;

public class MainActivity extends AppCompatActivity {

    EditText edit1, edit2;
    Button btnAdd, btnSub, btnMul, btnDiv, btnRem;
    TextView textResult;
    String num1, num2;   //입력될 2개 문자열을 저장할 변수
    Double result;      //계산 결과를 저장할 실수 변수

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);         //액티비티 화면 설정하는 메서드, xml파일과 코드와의 연결
        Objects.requireNonNull(getSupportActionBar()).setDisplayShowHomeEnabled(true);
        getSupportActionBar().setIcon(R.drawable.ic_launcher);
        setTitle("간단한 계산기");

        edit1 = findViewById(R.id.Edit1);               //에디트텍스트를 변수에 대입
        edit2 = findViewById(R.id.Edit2);

        btnAdd = findViewById(R.id.BtnAdd);             //버튼을 변수에 대입
        btnSub = findViewById(R.id.BtnSub);
        btnMul = findViewById(R.id.BtnMul);
        btnDiv = findViewById(R.id.BtnDiv);
        btnRem = findViewById(R.id.BtnRem);

        textResult = findViewById(R.id.TextResult);     //텍스트 뷰를 변수에 대입

        // <더하기> 버튼 클릭했을 대 동작 => 버튼에 터치 이벤트 리스너 정의
        // => 터치 시에 동작하는 내용을 onTouch() 메서드 안에 코딩함
        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();

                //값이 비어있다면
                if(num1.trim().equals("") || num2.trim().equals("")){
                    Toast.makeText(getApplicationContext(),"입력 값이 비었습니다.",Toast.LENGTH_SHORT).show();
                }
                else{
                    result = Double.parseDouble(num1) + Double.parseDouble(num2);
                    textResult.setText("계산 결과 : " + result.toString());
                }
            }
        });

        btnSub.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();

                //값이 비어있다면
                if(num1.trim().equals("") || num2.trim().equals("")){
                    Toast.makeText(getApplicationContext(),"입력 값이 비었습니다.",Toast.LENGTH_SHORT).show();
                }
                else{
                    result = Double.parseDouble(num1) - Double.parseDouble(num2);
                    textResult.setText("계산 결과 : " + result.toString());
                }
            }
        });

        btnMul.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();

                //값이 비어있다면
                if(num1.trim().equals("") || num2.trim().equals("")){
                    Toast.makeText(getApplicationContext(),"입력 값이 비었습니다.",Toast.LENGTH_SHORT).show();
                }
                else{
                    result = Double.parseDouble(num1) * Double.parseDouble(num2);
                    textResult.setText("계산 결과 : " + result.toString());
                }
            }
        });

        btnDiv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();

                //값이 비어있다면
                if(num1.trim().equals("") || num2.trim().equals("")){
                    Toast.makeText(getApplicationContext(),"입력 값이 비었습니다.",Toast.LENGTH_SHORT).show();
                }
                else{
                    if(num2.trim().equals("0")){
                        Toast.makeText(getApplicationContext(),"0으로 나누면 안됩니다.", Toast.LENGTH_SHORT).show();
                    }
                    else {
                        result = Double.parseDouble(num1) / Double.parseDouble(num2);
                        result = (result*10)/10.0;  //소수점 아래 1자리까지만 출력
                        textResult.setText("계산 결과 : " + result.toString(result));
                    }
                }
            }
        });

        btnRem.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();

                //값이 비어있다면
                if(num1.trim().equals("") || num2.trim().equals("")){
                    Toast.makeText(getApplicationContext(),"입력 값이 비었습니다.",Toast.LENGTH_SHORT).show();
                }
                else{
                    result = Double.parseDouble(num1) % Double.parseDouble(num2);
                    textResult.setText("계산 결과 : " + result.toString());
                }
            }
        });

    }
}
//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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/Edit1"
        android:layout_weight="1"
        android:layout_margin="6dp"
        android:hint="숫자1 입력하세요."/>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/Edit2"
        android:layout_weight="1"
        android:layout_margin="6dp"
        android:hint="숫자2 입력하세요."/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/BtnAdd"
        android:layout_weight="1"
        android:layout_margin="6dp"
        android:text="더하기"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/BtnSub"
        android:layout_weight="1"
        android:layout_margin="6dp"
        android:text="빼기"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/BtnMul"
        android:layout_weight="1"
        android:layout_margin="6dp"
        android:text="곱하기"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/BtnDiv"
        android:layout_weight="1"
        android:layout_margin="6dp"
        android:text="나누기"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/BtnRem"
        android:layout_weight="1"
        android:layout_margin="6dp"
        android:text="나머지값"/>

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

</LinearLayout>

ㅇ

728x90
반응형

'App > Android Java' 카테고리의 다른 글

Android_Java(6) - VolumeControlView  (0) 2022.02.07
Android_Java(5) - MyViewEvent  (0) 2022.02.07
Android_Java(4) - RatingBarApp  (0) 2022.02.07
Android_Java(3) - ImageView(pets)  (0) 2022.02.04
Android_Java(1) - 개요  (0) 2022.02.03

댓글