Xamarin 앱 개발 테스트 #3

이번에는 튜토리얼을 따라서 2개 이상의 스크린을 갖는 Android 앱을 만들어 본다. Android의 앱 구성 요소들을 나타낸 그림인데, static main이라는 함수가 앱의 시작점이 되고, Activity와 Service가 스크린을 구성한다고 한다.

_995

Intent는 메시지를 보냄으로써 어떤 일이 수행되도록 한다. 주로 Activity를 실행하는데 사용된다. 이 글을 Xamarin에 초점을 맞춰서 살펴보려고 하므로, 좀 더 자세한 내용은 튜토리얼을 참고하자.

Android의 설정은 AndroidManifest.xml에 포함되어 있으며 모든 앱은 이 파일을 포함해야 한다. 컴포넌트 등록, 권한 요구, 버전 호환성 등의 정보를 포함하여 자세한 내용은 여기서 참고 가능하다.

샘플로 만들 앱은 버튼을 클릭했을 때 두 번째 Activity를 불러오는 앱이다.

	[Activity (Label = "HelloMultiScreen", MainLauncher = true)]
	public class FirstActivity : Activity
	{

먼저 MainActivity(튜토리얼 상에는 Activity1으로 나와 있음) 로 되어 있는 클래스 명을 FirstActivity로 변경하였는데, 바로 위에 있는 ActivityAttribute에 대해서 설명하고 있다. 이 것은 앱이 컴파일 될 때, apk 파일에 들어가는 AndroidManifest.xml 파일을 수정하여 실행할 Activity를 설정한다고 한다. 수정된 AndroidManifest.xml 파일은 다음과 같다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="hellomultiscreen.hellomultiscreen" >
    <uses-sdk android:minSdkVersion="11" />
    <application android:icon="@drawable/icon"
        android:label="HelloMultiScreen">
        <activity android:name="FirstActivity"
            android:label="HelloMultiScreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

<intent-filter>가 있고, <action>, <category> 등이 설정되어 있는 것을 확인할 수 있는데 이 부분이 앱의 시작 지점을 나타낸다.

Activity를 변경하는 구문은 다음과 같다. StartActivity 메소드를 이용하는데 이 것은 원래 StartActivity를 오버라이드하여 Activity 타입을 받도록 한 것이라고 한다.

showSecond.Click += delegate {
    StartActivity(typeof(SecondActivity));
};

원래 방식은 다음처럼 호출한다고 한다.

var second = new Intent(this, typeof(SecondActivity));
StartActivity(second);

다음으로는 이동할 새로운 Activity를 만들어야 한다.

새로운 C# 파일로 SecondActivity.cs 라는 이름의 Android Activity 파일을 만들고, Resources/layout에는 Second.axml 파일을 추가한다. Second.axml의 파일에는 다음과 같이 TextView 하나를 추가하였다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
    	android:id="@+id/screen2Label"
    	android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
    	android:text="Hello second activity" />
</LinearLayout>

그리고, SecondActivity.cs의 OnCreate 메소드 안에 SetContentView를 추가해야 한다.

SetContentView (Resource.Layout.Second);

이렇게 하면 Activity의 이동은 간단히 구현이 가능하다.

image

추가로 아래와 같이 Intent 인스턴스의 PutExtra 메소드를 이용하면 Activity 간 데이터 전달을 할 수 있다.

showSecond.Click += delegate {
    var second = new Intent(this, typeof(SecondActivity));
    second.PutExtra("FirstData", "Data from FirstActivity");
    StartActivity(second);
};

PutExtra()는 문자열 뿐 아니라 다른 타입들도 전달할 수 있는 오버로드들을 포함하고 있다. 전달 받은 데이터는 SecondActivity에서 다음과 같이 사용할 수 있다.

var label = FindViewById<TextView> (Resource.Id.screen2Label);
label.Text = Intent.GetStringExtra ("FirstData") ?? "Data not available";

지금까지 멀티 스크린 앱에 대해서 살펴보았다. Activity의 Intent, 그리고 Layout을 통해서 UI에서 화면 전환을 어떻게 처리하는지를 살펴보았는데, Xamarin과 C#을 이용해서 쉽게 구현할 수 있음을 확인할 수 있었다.

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중