" /> 안드로이드 프로그래밍 3주차 | BlackWerf's Blog
포스트

안드로이드 프로그래밍 3주차

수업 내용

안드로이드의 주요 기능

  • 애플리케이션 프레임워크가 제공하는 API를 사용함으로서,

    코드 재사용을 통한 효율적이고 빠른 앱 개발이 가능함

  • 달빅이나 아트런타임(ART)를 제공함

    • 달빅 : 안드로이드에서 Java 앱 구동을 위한 JIT 방식 바이트코드 컴파일 모드

      롤리팝 이후 버전에서는 ART로 대체됨

    • 아트런타임 : Android Runtime의 약자로 달빅의 한계를 해결하기 위해 개발됨

  • 모바일 DB인 SQLite를 제공함

  • 각종 오디오와 비디오, 이미지의 형식을 지원함

  • 블루투스와 Wifi, 나침반과 같이 다양한 하드웨어를 지원함

  • 이클립스 IDE, 안드로이드 스튜디오를 이용한 빠른 개발을 가능하게 함


안드로이드의 특징

  • 핵심 커널은 리눅스로 이루어져 있음
  • 앱 개발언어는 Java로 진행됨
  • 안드로이드 SDK에 많은 라이브러리가 포함되어 개발이 편리함
  • 오픈소스 지향
  • 지속적 및 빠른 업데이트 제공함


안드로이드의 구조

  • 응용 프로그램

    • 안드로이드 프로그램에서 사용 가능한 일반적인 응용 프로그램
    • 브라우저, 달력 등 사용자 입장에서 가장 많이 사용됨
    • Java로 작성됨
    • 종류: Home, Contacts, Phone, Browser, etc….
  • 응용 프로그램 프레임워크

    • 안드로이드 API가 존재함
    • 하드웨어에 접근할 때, API를 통해서만 접근이 가능함
    • 종류: Activity Manager, Window Manager, Content Providers, View System, Package Manager, Telephony Manager, Resource Manager, Location Manager, Notification Manager
  • 라이브러리

    • 안드로이드 내의 시스템 라이브러리는 시스템 접근을 위하여 C언어로 작성되어 성능이 뛰어나고, 세밀한 조작이 가능함

    • 종류: Surface Manager, Media Framework, SQLite,

      Open GL ES, FreeType, WebKit, SGL, SSL, libc

  • 안드로이드 런타임

    • Java 코어 라이브러리와 달빅 가상 머신이나 아트 런타임으로 구성됨
    • 안드로이드는 Java로 프로그래밍 하지만, Java 가상머신 대신 달빅 가상머신이나 아트 런타임을 이용함
    • 종류: Core Libraries, DaMK VM
  • 리눅스 커널

    • 하드웨어의 제어와 관련된 관리 기능이 포함됨

      • 메모리 관리, 디바이스 드라이버, 보안 etc….
    • 많은 스마트폰 내의 장치를 지원함

      • 카메라, 터치스크린, GPS, 자이로스코프 etc….
    • 종류: Display Driver, Camera Driver, Flash Memory Driver, Binder Driver(IPC), Keypad Driver, Wifi Driver,

      Audio Driver, Power Management


안드로이드 스튜디오에서 배경화면을 추가하기

배경을 색상으로 채우기

  • **android:background=”#RGB코드값”> **을 이용하여 사용 가능하다

  • RGB코드값은 직접 채우는 방법과 미리 등록하여 불러오는 방법이 존재한다

직접 채우기

​ RGB코드값에 “FF0000”와 같이 직접 값을 입력해 지정이 가능하다

color를 등록하여 사용하기
  • 프로젝트 내의 values 폴더 내에 colors.xml 파일이 존재한다

  • 1
    2
    3
    4
    5
    
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="black">#FF000000</color>
        <color name="white">#FFFFFFFF</color>
    </resources>
    

    ​ colors.xml 파일 내에는 다음과 같은 방식으로 색상이 지정되어 있다.

    ​ black과 white의 예시대로 색상을 추가하면, 해당 색상이 저장된다

    ​ 이 색상을 불러오는 방법은 아래의 방법을 이용하면 가능하다

  • 색 불러오기

    color/색상명

    예시) color/black


배경을 그림으로 채우기

  • 화면을 그림으로 채우기 위해 필요한 과정은 다음과 같다

    • res 폴더 하위에 있는 drawable 폴더에 사용할 그림을 집어 넣는다
    • android:background에 확장자를 제외한 파일명을 입력한다
  • 사용한 파일

    Image Alt 텍스트

    코드는 다음과 같이 구성했다

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    <?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:background="@drawable/Test_Img">
    </LinearLayout>
    

    코드 결과

    Image Alt 텍스트

주의 사항
  • drawable 폴더 내에는 xml과 사진 파일을 제외한 파일이 있어서는 안된다
  • 한글로 된 파일을 사용해서는 안된다
  • 해상도에 맞지 않는 파일을 사용할 경우, 파일에 왜곡이 있을 수 있다
  • 파일명은 소문자로 작성해야한다


안드로이드 스튜디오에서 ImageView를 이용하여 사진을 추가하기

사용한 파일:

Image Alt 텍스트

구현 방법

방법 1
  1. res 폴더 하위에 있는 drawable 폴더에 사용할 그림을 집어 넣는다
  2. activity_main.xml 파일에서 ImageView를 추가한다
  3. MainActivity.java 파일에서 ImageView를 메모리에 선언한다.
  4. ImageView변수명.setImageResource(R.drawable.파일명);을 이용하여 파일을 선택한다

사용한 코드

activity_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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:background="@drawable/test_img">

    <ImageView
        android:id="@+id/imgView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></ImageView>
</LinearLayout>

MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.example.background20214135;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    ImageView imgView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imgView = (ImageView)findViewById(R.id.imgView);
        imgView.setImageResource(R.drawable.pngegg);
    }
}
방법 2
  1. res 폴더 하위에 있는 drawable 폴더에 사용할 그림을 집어 넣는다
  2. activity_main.xml에 ImageView를 추가한다
  3. android:src=”@drawable/파일명”을 이용하여 파일을 선택한다

사용한 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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:background="@drawable/test_img">

    <ImageView
        android:id="@+id/imgView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/pngegg"></ImageView>
</LinearLayout>


결과

Image Alt 텍스트

첫번째 방법의 경우 빌드 이후 이미지가 지정되고, 두번째 방법은 xml파일에서 지정하므로 빌드 전에도

확인이 가능하다는 차이점이 있지만 두가지 경우 모두 동일하게 이미지가 표시된다


안드로이드 스튜디오에서 화면 이동하기

구현 내용

  • 메인뷰에서 버튼을 누르면 Second라는 2번째 화면으로 이동한다

  • 2번째 뷰에서 ‘두번째 화면 메인 가기’라는 버튼을 누르면 첫번째 화면으로 이동한다

구현 방법

  • 안드로이드 스튜디오에서 다른 화면으로 전환을 위해서는 Intent를 사용한다

    • Intent는 액티비티 간의 데이터 전달에 사용되는 클래스로 화면 전환 용으로만 사용하는 것이 아니라, List등의 데이터도 전달이 가능하다
  • 아래의 코드를 이용하면 화면을 생성 및 이동이 가능하다

    1
    2
    
    Intent 객체명 = new Intent(가져올 데이터 정보, 이동할 화면);
    startActivity(객체명);
    
  • 다른 화면에서 원래 화면으로 이동할 때는 java파일을 종료하는 명령어는 finish();를 사용하면 된다.

주의사항
  • 다른 화면을 생성하기 위해서는 javaxml형태의 파일을 생성해야한다


사용한 코드

activity_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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"
    >

    <Button
        android:id="@+id/mainBtn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="MBTN 1"
        android:textSize="30sp"
        />
</LinearLayout>

second.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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"
    android:background="#FF0000">

    <Button
        android:id="@+id/subB1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="두번째 화면 메인 가기"
        android:textSize="30sp" />

    <!-- Second.java 실질적인 자바화면 생성 -->

</LinearLayout>

MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package kr.ac.baekseok.activity20214135;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    Button mBtn1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mBtn1 = (Button)findViewById(R.id.mainBtn1);

        mBtn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //메인에서 두번째 화면으로 이동하기(second.xml, second.java)
                //인스턴스 생성하기

                //현재 앱의 정보, 이동할 화면의 정보값
                Intent intent = new Intent(getApplicationContext(), Second.class); //생성자(클래스명과 동일한 메소드명)
                startActivity(intent); //인텐트 정보를 가지고 화면 시작하기
            }
        });//mBtn1
    } //onCreate
}

Intent 클래스의 생성자를 이용하여 현재앱의 정보와 이동할 화면의 정보를 매개변수로 지정해 객체를 생성하고, startActivity를 이용해 생성된 화면을 실행한다.


Second.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package kr.ac.baekseok.activity20214135;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import androidx.annotation.Nullable;

public class Second extends Activity {
    //화면 클래스는 필수메소드 onCreate() -> [code] - [override]
    Button secondBtn1;
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second); //디자인을 설정하기
        
        secondBtn1 = (Button)findViewById(R.id.subB1);
        secondBtn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //메인으로 이동(Intent 클래스)
                finish(); //Second.java를 종료
            }
        });
    }
} //second

화면 닫기는 화면을 이동할때 MainActivity.java에서 인스턴스화 하여 진행하는 것과 달리, 단순 종료이므로 finish()를 이용하여 종료한다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.