본문 바로가기

컴퓨터학원(복습)(수료)

자바(JAVA)기반 안드로이드 웹&앱 개발 39일차 (토스트, 스낵바, 프로그레스바, 인플레이션, 화면 간 전환, 인텐트)

어렵습니다.. 안드로이드..

[토스트 사용하기]

1. 토스트는 간단한 메시지를 잠깐 보여주었다가 없어지는 뷰로 앱 위에 떠 있는 뷰라고

....할 수 있다.

2. 토스트는 포커스를 받지 않으므로 대화상자보다 더 쉽고 간단하게 사용할 수 있으며

....디버깅 등의 목적으로도 사용할 수 있다.

3. 앱이 화면에서 사라지더라도 필요한 메시지가 그대로 표시되므로 앱의 상태와 관계없이

....보여줄 수 있다.

 

★ 토스트 메시지를 만들어서 보여주는 전형적인 방법

Toast.makeText(Context context, String message, int duration).show();

☞ Context 객체는 일반적으로 Context 클래스를 상속한 액티비티를 사용할 수 있으며 액티비티를 참조할 수 없는 경우에는 getApplicationContext() 메서드를 호출하면 Context객체가 반환된다.

★ 토스트 위치와 여백을 지정하는 메서드

public void setGravity(int gravity, int xOffset, int yOffset)

☞ 토스트 뷰가 보이는 위치를 지정하는데 사용

☞ 첫 번째 파라미터인 gravity 값은 Gravity.CENTER와 같이 정렬위치를 지정

public void setMargin(float horizontalMargin, float verticalMargin)

☞ 외부 여백을 지정하는 것으로 이 값을 이용해 토스트를 중앙이나 우측 하단에 배치가능

 

[토스트 위치 바꿔 보여주기]

※ 토스트 위치 바꿔 보여주기 예시

[토스트 모양 바꿔 보여주기]

1. 액티비티를 위해 만든 XML 레이아웃 파일은 setContentView() 메서드를 사용해 액티비티에 설정되지만 토스트만을 위한 레이아웃을 정의한다면 이 레이아웃은 액티비티를 위한 것이 아니기 때문에 LayoutInflater 객체를 사용해 직접 메모리에 객체화해야 한다.

2. 여기서는 XML 레이아웃을 메모리에 로딩한다고 생각하면 된다.

※ 토스트 모양 바꿔 보여주기 예시

 

[스낵바 보여주기]

1. 스낵바는 외부 라이브러리로 추가되었기 때문에 스낵바가 들어 있는 머티리얼 라이브러리(Material Library)를 프로젝트에 추가해야 사용할 수 있다.

※ 스낵바 보여주기 예시

 

[알림 대화상자 보여주기]

1. 알림 대화상자는 사용자에게 확인을 받거나 선택하게 할 때 사용한다.

2. 보통 알림 대화상자는 사용자의 입력을 받기보다는 일방적으로 메시지를 전달하는 역할을 주로 하며 ‘예’, ‘아니오’와 같은 전형적인 응답을 처리한다,

※ 알림 대화상자 보여주기 예시

 

[프로그레스바]

1. 프로그레스바는 작업의 진행 정도를 표시하거나 작업이 진행 중임을 사용자에게 알려준다.

속성

설명

막대모양

작업의 진행 정도를 알려줄 수 있도록 막대모양으로 표시한다.

style 속성 값을 ‘?android:attr/progressBarStyleHorizontal'로 설정한다.

원 모양

작업이 진행 중임을 알려준다.

원 모양으로 된 프로그레스바가 반복적으로 표시된다.

2. XML 레이아웃에 프로그레스바를 추가할 때는 <ProgressBar> 태그가 사용되는데, 프로그레스바가 갖는 값의 최대 범위는 max 속성으로 설정하고 현재 값은 progress 속성으로 설정한다.

★ 자바 코드에서 프로그레스바의 현재 값을 바꿀 때 사용하는 대표적인 메서드

void setProgress (int progress)

☞ 정수 값을 받아 프로그래스바의 현재 값으로 설정

void incrementProgressBy (int diff)

☞ 현재 설정되어 있는 값을 기준으로 값을 더하거나 뺄 때 사용

★ 타이틀바에 프로그레스바를 표시하는 메서드

requestWindowFeature(Window.FEATIRE_PROGRESS);

☞ 타이틀 부분에 표시되는 프로그레스바는 범위를 따로 지정할 수 없으며 디폴트 값으로는 0부터 10000까지 사이의 값을 가질 수 있다.

※ 프로그레스바 예시

 

[레이아웃 인플레이션 이해하기]

1. 안드로이드 앱은 화면 배치를 알려주는 XML 레이아웃 파일과 화면의 기능을 담당하는

....소스코드파일로 분리하여 개발해야 한다.

2. 두 개의 XML 레이아웃 파일과 하나의 소스 코드 파일만 있다면 어떤 XML 레이아웃

....파일이 소스 파일과 연결되는 것인지 어떻게 알 수 있는가?

☞ onCerate() 메서드 안에 super.onCreate() 메서드는 부모 클래스의 동일한 메서드를

,,,,호출하는 것이니 사실상 setContentView() 메서드가 소스코드의 전부인 셈이다.

....즉, setContentView() 메서드가 XML 레이아웃 파일을 연결한다고 추측할 수 있다.

☞ 화면의 기능을 담당하는 소스 파일에는 AppCompatActivity를 상속하는 MainActivity

....클래스가 자동으로 만들어진다. 그런데 MainActivity 클래스가 상속하는

....AppCompatActivity에는 화면에 필요한 기능(메서드)들이 있다. 그 기능 중 하나인

....setContentView() 메서드에 XML 레이아웃 파일 이름을 파라미터로 전달하여 XML

....레이아웃과 소스 코드를 연결 한 것이다. 이런 방식으로 앱을 실행했을 때 화면이

....나타나게 된다. 이 때, setContentView() 메서드에 전달하는 XML 레이아웃 파일의 이름은

....R.layout.activity_main과 같은 방법으로 확장자 없이 지정해야 한다.

☞☞ 대문자 R은 프로젝트 창에 보이는 res 폴더를 의미한다.

☞☞ layout은 res 폴더의 layout 폴더를 의미한다.

3. 앱이 실행될 때 XML 레이아웃의 내용이 메모리에 객체화되고 객체화된 XML 레이아웃을

....소스 파일에서 사용한다. 이렇게 XML 레이아웃의 내용이 메모리에 객체화되는 과정을

....‘인플레이션(Inflation)'이라고 한다.

☞ XML 레이아웃은 앱이 실행되는 시점에 메모리에 객체화 된다. 즉, XML 레이아웃 파일에

....<Button> 태그를 정의해도 앱은 자신이 실행되기 전까지 버튼이 있는지 모른다.

4. setContentView() 메서드는 액티비티의 화면 전체(메인 레이아웃)을 설정하는 역할만을

...수행한다. 즉, setContentView()메서드로는 부분 화면(부분 레이아웃)을 메모리에

...객체화 할 수는 없다.

5. 부분 화면을 메모리에 객체화하려면 인플레이터를 사용해야 한다. 안드로이드는 이를 위해

....시스템 서비스로 LayoutInflater라는 클래스를 제공한다. 그런데, LayOutInflater

....클래스는 시스템 서비스로 제공하는 클래스이므로 다음 getSystemService() 메서드를

....이용하여 LayoutInflater 객체를 참조한 후 사용해야 한다.

※ 레이아웃 인플레이션 예시

 

[여러 화면 만들고 화면 간 전환하기]

1. 대부분의 앱은 여러 화면으로 구성되어 있고 화면을 전환하며 실행한다. 그리고 화면은

....액티비티로 구현한다. 즉, 화면을 필요에 따라 띄우거나 닫는 과정은 액티비티를 전환하는

....것과 같다.

2. 안드로이드 앱의 네 가지 구성요소로는 ‘액티비티(Activity)’, ‘서비스(Service)’,

....‘브로드캐스트 수신자(Broadcast Receiver)’, ‘내용 제공자(Content Provider)’가 있다.

3. 실제로 앱을 만들다 보면 메인 액티비티에서 띄워야 할 화면이 많아져 띄웠던 화면을 닫고

....원래의 메인 화면으로 돌아올 때 데이터를 새로 적용해야 하는 경우가 자주 생긴다. 즉,

....단순히 액티비티를 띄어줘는 것이 아니라 어떤 액티비티를 띄운 것인지 그리고 띄웠던

....액티비티로부터 다시 원래의 액티비티로 돌아오면서 응답을 받아 처리하는 코드가

....필요하게 된다.

★ startActivityForResult(Intent intent, int requestCode)

☞ 코드값(requestCode)는 일반적으로 각각의 액티비티를 구별하기 위해 사용된다.

☞ Intent 객체는 액티비티를 띄울 목적으로 사용되며 액티비티간에 데이터를 전달하는

....데에도 사용될 수 있다.

※ 화면 간 전환 예시

 

★ 액티비티 추가와 요청 그리고 응답과정

1. 새로운 액티비티 만들기

.1) 새로운 액티비티를 추가하면 XML 레이아웃 파일 하나와 자바 소스 파일 하나가

.....만들어지고 매니페스트 파일에 액티비티 태그가 추가된다.

2. 새로운 액티비티의 XML 레이아웃 정의하기

.1) 새로 만들어진 XML 레이아웃을 수정하여 새로운 액티비티의 화면이 어떻게 배치될지를

,,,,작성한다.

3. 메인 액티비티에서 새로운 액티비티 띄우기

.1) 메인 액티비티의 버튼을 클릭하면 startActivityForResult() 메서드로 새로운 액티비티를

....띄운다.

4. 새로운 액티비티에서 응답 보내기

.1) 새로운 액티비티가 보이고 그 안에 들어 있는 버튼을 클릭하면 setResult() 메서드로

.....응답을 보낸다.

5. 응답 처리하기

.1) 메인 액티비티에서 onActivityResult() 메서드를 재정의하여 새로 띄웠던 액티비티에서

....보내오는 응답을 처리한다.

 

[인텐트 살펴보기]

[인텐트의 역할과 사용방식]

1. android.content 패키지 안에 정의되어 있는 인덴트는 앱 구성 요소 간에 작업수행을

...위한 정보를 전달하는 역할을 한다.

★ 다른 앱 구성요소에 인텐트를 전달할 수 있는 대표적인 메서드들

startActivity() 또는 startActivityForResult()

☞ 액티비티를 화면에 띄울 때 사용

startService() 또는 bindService()

☞ 서비스를 시작할 때 사용

broadcastIntent()

☞ 인텐트 객체를 브로드캐스팅 방식으로 전송할 때 사용

2. 인텐트의 기본 구성 요소는 ‘액션(Action)’과 ‘데이터(Data)’이다. 액션은 수행할 기능이고

...,,데이터는 액션이 수행될 대상의 데이터를 의미합니다.

★ 인텐트의 생성자들

Intent()

Intent(Intent o)

Intent(String action [, Uri uri])

Intent(Context packageContext, Class<?> cls)

Intent(String action, Uri uri, Context packageContext, Class<?> cls)

☞ 다른 인텐트나 클래스 객체를 인수로 하여 만들기도 하는 것을 확인할 수 있다.

3. 인텐트에 클래스 객체나 컴포넌트 이름을 지정하여 호출할 대상을 확실히 알 수 있는

....경우에는 ‘명시적 인텐트’라고 하며, 액션과 데이터를 지정하긴 했지만 호출할 대상이

....달라질 수 있는 경우에는 ‘암시적 인텐트’라고 부른다.

 

[암시적 인텐트의 속성]

1. 범주(Category)

.1) 액션이 실행되는 데 필요한 추가적인 정보를 제공

2. 타입(Type)

.1) 인텐트에 들어가는 데이터의 MIME 타입을 명시적으로 지정한다.

3. 컴포넌트(Component)

.1) 인텐트에 사용될 컴포넌트 클래스 이름을 명시적으로 지정한다.

4. 부가 데이터(Extra Data)

.1) 인텐트는 추가적인 정보를 넣을 수 있도록 번들(Bundle)객체를 담고 있다.

.2) 이 객체를 통해 인텐트 안에 더 많은 정보를 넣어 다른 앱 구성요소에 전달할 수 있다.

※ 인텐트에 액션과 데이터를 넣어 다른 앱의 액티비티를 띄우는 경우와 컴포넌트 이름을 이용해 새로운 액티비티를 띄우는 예시