본문 바로가기
개발/안드로이드 개발

[안드로이드] 웹툰 바로기가 어플 - Activity, Intent

by 똘똘이박사 2015. 10. 7.

· 최초작성 : 2015. 10. 07.

· 최종수정 : 2015. 10. 22.

· 작성/수정내용 :

  - 작성/수정 내용

     . Activity 및 Intent 정리

     . manifest 파일에서 가장 먼저 읽어 오는 부분에 대한 설명 추가




시작하기에 앞서...


공부하면서 보니까 Activity와 Intent 양이 어마어마 한데...

이걸 어쩌나....  일단 시작해 봅니다.



# 안드로이드 웹툰 바로가기 어플 - Activity, Intent


이전 포스팅에서는 어플 디자인을 했었죠.

그래서 이번 포스팅에서는 웹툰 바로가기 어플이 실제로 동작하게 만들어 볼까 합니다.

프로그램이 실제로 동작하도록 하기 위해서는 어떤 방식으로 돌아가야 하는지 알아야 겠죠

따라서 이번 포스팅에서는 프로그램이 동작하는데 있어서 중요한 구조적 요소인 ActivityIntent 를 정리해 보려고 합니다.

 

안드로이드 구조에 대해 잘 모르시면 이전 포스팅을 잠깐 읽어 보고 오시면 더 좋을거 같습니다.( 안 읽어 보고 오셔도 되구요 ㅎㅎㅎㅎ)








1. Activity(액티비티)


  Activity는 화면에 보여지는 그 자체를 말합니다.

 어플 들은 1개 이상의 Activity를 가지고 있고, 각각의 화면을 가지고 있습니다.

 웹툰 바로가기 어플은 1개의 Activity 를 가지고 있습니다.

 여기서 각 버튼을 클릭 할 때 마다 다른 프로그램들을 호출 하는 것이지요

 다른 Acitvity로 호출 할 때는 Intent 가 사용됩니다.

 그럼 우선 소스를 먼저 보고 이야기 할께요

 

MainActivity.java

package com.freehoon.webtoon;

import
android.content.Intent;
import
android.net.Uri;
import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
import
android.view.Menu;
import
android.view.MenuItem;
import
android.view.View;
import
android.widget.Toast;

public class
MainActivity extends AppCompatActivity {

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

   
@Override
   
public boolean onCreateOptionsMenu(Menu menu) {
       
// Inflate the menu; this adds items to the action bar if it is present.
       
getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
   
}

   
@Override
   
public boolean onOptionsItemSelected(MenuItem item) {
       
// Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
       
int id = item.getItemId();

       
//noinspection SimplifiableIfStatement
       
if (id == R.id.action_settings) {
           
return true;
       
}

       
return super.onOptionsItemSelected(item);
   
}

   
//버튼 클릭 처리
   
public void onClick(View view) {
        Intent intent
;
       
String webtoon_url = null;

        switch
(view.getId()){
           
case R.id.btn_daum_webtoon:
                webtoon_url =
"http://m.webtoon.daum.net";

                break;
            case
R.id.btn_naver_webtoon:
                webtoon_url =
"http://m.comic.naver.com/webtoon/weekday.nhn";
                break;
       
}
        intent =
new Intent(Intent.ACTION_VIEW, Uri.parse(webtoon_url));
       
startActivity(intent);
   
}
}


안드로이드 어플은 처음 시작할 때 MainActivity.java 파일을 참조 합니다.

우선 왜 MainActivity를 참조하게 되는지부터 이야기 해야 하겠네요.

 


안드로이드 어플이 구조적으로 어떻게 구성되어 있는지는 AndroidManifest.xml 파일에서 정의 합니다.

어플 이름은 무엇이고 패키지는 무엇인지 등이 정의되어 있는 것이죠.

그리고 어떤 파일을 가장 먼저 읽고 시작하는지 정의되어 있는 파일 입니다.



AndroidMainfast.xml 위치는 아래 그림과 같니다.






그리고 소스를 보면 아래와 같습니다.


AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   
package="com.freehoon.webtoon" >
    <application
       
android:allowBackup="true"
       
android:icon="@mipmap/ic_launcher"
       
android:label="@string/app_name"
       
android:theme="@style/AppTheme" >
        <activity
           
android:name=".MainActivity"
           
android:label="@string/app_name" >
            <intent-filter>
                <action
android:name="android.intent.action.MAIN" />
                <category
android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

manifest 파일에서는 어플에 대한 여러 가지 설정(패키지명, 아이콘, 테마 등)Activity에 대한 모든 선언이 지정되어 있습니다.

웹툰 바로기가 어플에는 Activity1개 밖에 없어서 위 소스에는 <activity>1개 밖에 없네요.

만약 어플이 1개의 Activity로 이루어진게 아니고 여러 개의 Activity로 이루어져 있다면 

도대체 어떤 Activity가 첫번째 인가 하는 것을 정해야 하는 것이죠

자 그럼 어느 부분일까요?????

가장 먼저 읽어야 하는 Activity를 선언하는 부분은????


<activity>에 있는 android:name 부분입니다.


android:name=".MainActivity"

이 설정을 참조하여 어플이 시작할때 가장먼저 MainActivity.java 파일을 가장 먼저 읽어오게 됩니다.



엉...??? 처음 읽어 오는게 JAVA 파일이네요 ㅎ


manifest 파일에서 바로 화면을 그려주는 xml파일을 직접 읽어 오지 않습니다.

가장 먼저 실행할 java 파일을 읽어올 뿐이죠


그럼 MainActivity.java 에서 가장 먼저 읽어올 화면을 찾아야 합니다.

소스를 자세히 보면 onCreate 매소드 시작하자 마자 다음과 같은 코드가 있습니다.

        setContentView(R.layout.activity_main);


해당 패키지의 layout 안에 있는 layout 폴더에서 activity_main 이라는 파일을 참조하라고 합니다.



AndroidManifest 파일에서 또 한가지 볼 수 있는 부분은 Intent 입니다.


<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />


여러개의 Activity가 있을때

위와 같이 선언해 줌으로 해서 해당 Intent가 포함되어 있는 Activity가 main이라고 알게 되는 것입니다.





자 그럼 다시 MainActivity.java로 넘어 오겠습니다.


MainActivity 클래스는 AppCompatActivity 클래스를 상속받은 클래스 입니다.

AppCompatActivity 클래스의 기원은 Activity 클래스이구요.


이전에는 ActionBarActivity를 상속받아 썼으나 레이아웃 인플레이트 문제로 인해 현재는 ActionBarActivity를 사용하지 않는다고 하네요

(레이아웃 인플레이트 문제가 뭔지... 전 잘 모르겠습니다.;;;; ㅎㅎㅎㅎ;;;;;;;;;;;;;)





그럼 어디에서 우리가 그린 layout를 불러 오는 것일까요?

onCreate 매소드 안에 있는 setContentView를 통해서 우리가 그린 layout를 불러와 화면에 보여주게 됩니다.


setContentView(R.layout.activity_main);

위의 소스를 보면 activity_main 을 불러온다고 되어있죠

이렇게 해서 우리가 만든 화면을 불러오는 것까지 끝나게 되는 겁니다.


사실 위와 같은 셋팅은

프로젝트를 생성할때 아무것도 수정안하고 'Next' 버튼만 계속 클릭하면 IDE에서 알아서 만들어 주는 부분이라

우리가 따로 신경써야 할 부분은 아닙니다.


다만 어떻게 돌아가는지 알아 보려구요~ 그냥 그렇다는거죠 ㅎㅎㅎㅎ


이번 포스팅에서는 화면이 어떻게 구성되고 어떻게 돌아가고 Activity가 어떻게 불러와 지는지에 대해서만 살펴보았습니다.

하지만 Activity에 대해서는 더 이야기할 게 많이 남아 있어서

다음 포스팅에서 Activity에 대해서만 조금만 더 정리를 해보겠습니다




2. Intent(인텐트)


이제 화면을 불러 왔으니 버튼을 클릭하면 웹툰 페이지를 불러올 차례 입니다.

우리가 화면을 구성하면서 Button 속성중 하나에 click 이벤트를 설정해주신것을 기억하시나요?


기억이 안나지면 잠깐 바로 이전 포스팅을 보고 오도록 할께요~





<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn_daum_webtoon"
android:onClick="onClick"
android:text="@string/daum_Webtoon"
android:width="150dp"
android:textStyle="bold"
/>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn_naver_webtoon"
android:onClick="onClick"
android:text="@string/naver_Webtoon"
android:width="150dp"
android:textStyle="bold"
/>

우리는 Button 위젯을 만들때 onClick 속성을 만들어 주었습니다.

버튼이 클릭되면 해당 함수를 실행하도록 하는 것이죠


이때 만들어준 함수가 onClick() 입니다.

이제 이 함수를 MainActivity에 정의해 주면 되는 것입니다.

위의 MainActivity 가장 하단에 함수가 선언되어 있는 것을 보실 수 있습니다.


//버튼 클릭 처리
public void onClick(View view) {
Intent intent;
String webtoon_url = null;

switch (view.getId()){
case R.id.btn_daum_webtoon:
webtoon_url = "http://m.webtoon.daum.net";

break;
case R.id.btn_naver_webtoon:
webtoon_url = "http://m.comic.naver.com/webtoon/weekday.nhn";
break;
}
intent = new Intent(Intent.ACTION_VIEW, Uri.parse(webtoon_url));
startActivity(intent);
}


내용은 상당히 간단 합니다.

어떤 버튼이 클릭되었는지 해당 버튼이 클릭되면 url 주소를 저장시켜 주고


Intent를 사용해 해당 페이지를 호출(startActivity())해 보여주는 것입니다.


이와같이 Intent는 Activity에서 다른 Activity를 호출 하고자 할때 사용됩니다.


그리고 다른 Activity를 호출할때는 인자값을 같이 넘길 수 도 있습니다.

이 부분에서는 Activity를 자세히 살펴볼때 같이 확인해 보도록 하겠습니다.





이렇게 해서 아주 간단하게 웹툰 바로가기 어플을 만들어 보았습니다.

모두 잘 실행이 되는지 모르겠네요



다음 포스팅에서는 화면을 좀더 이쁘게 꾸며 보도록 하려고 합니다.

여러 가지 방법 중 ImageButton을 한 번 사용해 볼께요




반응형