SlideShare a Scribd company logo
1 of 30
Download to read offline
Xamarin을 자바보자!
Xamarin 크로스플랫폼
www.topcredu.co.kr
2.1 Hello Android(Xamarin.Android Application) Example
 Xamarin.Android를 이용하여 전하번호를 입력받은 후 폰의 전하걸기 앱을 호출하여 전화거는
기능을 구현해 보자. (실습시 전화걸기가 권한/보안 오류로 인해 작동하지 않는다면 설정 ->
애플리케이션 관리 -> 애플리케이션 관리자를 실행하여 해당 앱을 선택하고 권한 -
> 전화를 선택하여 권한을 주도록 하자)
 실습환경 (Visual Studio 2015)
 Visual Studio 2015를 실행하여 파일 -> 새로만들기 -> 프로젝트를 클릭 후 좌측 템플릿에서
Android -> 비어있는 앱(Blank App)을 선택하고 프로젝트 이름을 “Android_Hello”라고 입력을
하자.
 프로젝트가 생성되면 우측 솔루션 탐색기의 Resources -> Layout 아래의 Main.axml을
더블 클릭하면 폰화면이 나타난다, 이 파일이 스크린의 Layout 파일이다.
 화면 좌측에 도구상자(ToolBox)가 보이지 않으면 보기메뉴 -> 도구상자를 클릭해서 좌측
에 위치시킨 후 Text(Large)를 드래그 해서 폰화면의 상단 가운데 위치 시키고 우측하단 속성
창에서 Text 속성을 " Enter a Phone Number : ” 로 입력하자.
 툴박스(ToolBox)에서 Plain Text 위젯을 선택 후 Text(Large) 박스 아래에 위치 시키고 id 속
성을 “@+id/PhoneNumberText”로 설정하자.
 도구상자에서 Button을 선택해서 Plain Text 아래에 위치시키고 id 속성을
“@+id/CallButton”, Text 속성을 “Make a Call”로 설정하자.
 “make a Call“ 버튼과 연관된 기능을 구현하는데 솔루션 탐색기에서 MainActivity.cs 파일을
오픈하자 MainActivity의 OnCreate 메소드에서 전화걸기 버튼의 기능을 구현한다.
[MainActivity.cs]
using System;
using Android.App;
using Android.Content;
using Android.Widget;
using Android.OS;
using Android.Text;
namespace Android_Hello
{
[Activity(Label = "Xamarin Android",
MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
EditText phoneNumberText =
FindViewById<EditText>(Resource.Id.PhoneNumberText);
//전화걸기 버튼
Button callButton =
FindViewById<Button>(Resource.Id.CallButton);
callButton.Enabled = false;
phoneNumberText.TextChanged +=
(object sender, TextChangedEventArgs e) =>
{
if (!string.IsNullOrWhiteSpace(phoneNumberText.Text))
callButton.Enabled = true;
else
callButton.Enabled = false;
};
callButton.Click += (object sender, EventArgs e) =>
{
//Make a Call 버튼 클릭시 전화를 건다.
var callDialog = new AlertDialog.Builder(this);
callDialog.SetMessage("Call " + phoneNumberText.Text +
"?");
//"Call"을 클릭하는 경우
// 전화걸기 위한 인텐트 생성
callDialog.SetNeutralButton("Call", delegate
{
// 인텐트는 액티비티의 전환이 일어날 때 호출하거나
메시지를 전달하는 매개체
// 암시적 인텐트 : 전환될 곳을 직접 지정하지 않고
액션을 적어서 사용한다.
// 명시적 인텐트 : 전환될 액티비티를 직접 적어서
표현하는 방법을 사용한다.
var callIntent = new Intent(Intent.ActionCall);
callIntent.SetData(Android.Net.Uri.Parse("tel:" +
phoneNumberText.Text));
StartActivity(callIntent);
});
//Cancel을 클릭하는 경우
callDialog.SetNegativeButton("Cancel", delegate { });
callDialog.Show();
};
}
}
}
 Application에 전화거는 기능을 활성화 시키자. Android Manifest안에 권한과 관련된 부분을
정의해야 하는데 솔루션 탐색기에서 Properties를 더블클릭하고 좌측 Android Manifest를
선택 후 하단의 Permission중 CALL_PHONE permission을 활성화 하자.
 모든 변경사항을 저장(Ctrl+Shift+S)하고 빌드하자.(Build > Rebuild Solution)
 MainActivity.cs의 Label은 응용프로그램의 스크린 최상단에 디스플레이되는 텍스트이니 필요
하다면 수정을 하면 된다.
[Activity(Label = "Xamarin Android", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity {
 응용프로그램의 아이콘을 설정할 수 있는데
https://developer.xamarin.com/guides/android/getting_started/hello,android/Resources/Xamari
nAppIconsAndLaunchImages.zip 에서 아이콘 ZIP파일을 다운받아 적당히 압축을 풀자. 프로
젝트의 Resources -> drawable 존재하는 Icon.png 파일을 먼저 삭제후 압축푼 경로 아래
Androiddrawable 폴더의 Icon.png를 다시 선택해 주면 되는데 솔루션 탐색기 ->
Ressources -> drawable 에서 마우스 우측버튼 -> 추가 -> 기존항목을 선택 후 압축 푼 경로
의 Androiddrawable 아래의 Icon.png 파일을 선택하면 아이콘이 등록된다.
 앞에서 다운 받은 파일의 Androiddrawable* 폴더들을 프로젝트로 복사하면 되는데
drawable 폴더를 제외한 모든 폴더를 복사 후 프로젝트의 Resources 아래에 붙여넣자.
 다음은 Android Manifest안에 아이콘을 등록하면 되는데 솔루션 탐색기의 Properties 더블클
릭 -> 왼쪽에서 Android Manifest를 선택 후 나타나는 화면의 Application Icon 메뉴에서
@drawble/Icon을 선택하자.
 이제 에뮬레이터, 또는 안드로이드폰으로 테스트를 해보자.
Properties를 더블클릭 후 좌측 Application 에서 API LEVEL 23(mashimallow)로 설정하고 이뮬
레이터를 실행했다. 상단의 실행단추를 눌러 실행하자.
[에뮬레이터 실행화면]
 폰으로 테스트 하기 위해서는 휴대폰을 USB로 연결 후 폰에서 USB 디버깅을 활성화 해야
되는데 휴대폰 상단 설정을 클릭하고 더보기 -> 개발자옵션 ->USB 디버깅을 체크하자. 또는
갤럭시 S4이후, 안드로이드4.2 젤리빈 이후의 폰들은 개발자 옵션이 비활성화 되어있으므로
설정 -> 디바이스 정보 -> 빌드번호 를 7번 클릭하면 “개발자 모드가 실행되었습니다” 라는
메시지가 나오면서 개발자 모드가 활성화 된다. 개발자 모드를 활성화하면 USB 디버깅도 같
이 활성화 하자.
[휴대폰 실행화면]
2.2 Hello Xamarin Android 구조?
 Properties : 응용프로그램 이름, 버전, 접근권한과 같이 Xamarin.Android Application 요구사항
들을 설명하는 AndroidManifest.xml을 포함하고 있으며, 자기자신 어셈블리를 서술하는
AssemblyInfo.cs 파일도 제공한다.
 참조 : 응용프로그램이 참조하는 내부, 외부 어셈블리(.DLL)을 지정한다. System, System.Core,
System.Xml 같은 닷넷 어셈블리들과 Xamarin Mono.Android 같은 어셈블리들에 대한 참조들
을 포함한다.
 Components : Xamarin Components store, Xamarin code용 공개 마켓플레이스를 제공하기 위
한 폴더, Xamarin Components는 Xamarin.iOS 및 Xamarin.Android 응용 프로그램에서 사용할
다양한 구성 요소를 제공하고 구성 요소는 사용자 인터페이스 컨트롤에서 코드 라이브러리,
사용자 인터페이스 테마까지 다양하다. Xamarin을 기반으로하는 응용 프로그램을 사용하면
풍부한 사용자 경험을 생성하고 거의 모든 작업을 수행하여 여러 가지 타사 서비스와 통합
할 수 있다.
 Assets : 폰트, 로컬 데이터 파일, 텍스트파일과 같이 어플리케이션 실행에 필요한 파일들 포
함하고 여기에 해당하는 파일들은 생성된 Assets 클래스를 통하여 접근 가능하다.
 Resources : Strings, 이미지, 레이아웃과 같은 리소스들을 담고 있으며 생성된 Resource 클래
스를 통해 코드로 접근 할수 있다.
2.2.1 Resources
 Resources 디렉토리는 Resource.Designer.cs파일과 drawable, layout, values의 폴더를 담고 있
다.
 drawable : 이미지, 비트맵등 drawable resources를 제공한다. 기본 템플릿에서는 drawable폴
더는 application 아이콘 파일(Icon.png)를 제공한다.
 layout : 스크린 또는 액티비티용 User Interface를 정의하는 Android designer 파일들(.axml)
담고 있다. 안드로이드 템플릿에서는 Main.axml이라는 기본 레이아웃을 제공해 준다.
 Resources.Designer.cs : Resource class로 알려져 있는 이 파일은 각 리소스에 할당된 unique
ID를 담고 있는 부분 클래스(Partial Class) 파일이다. Xamarin.Android tools가 자동으로 생성되
며 필요할때 재성성된다. 이 파일은 직접 수정할수 없고 Xamarin.Android에서 UI 변경변 발
생될 때 마다 자동으로 수정된다.
2.2 Hello Android MultiScreen Example
 이전 Android_Hello 프로젝트에 전화건 내역을 저장하는 화면과 로직을 추가해 보자.
 비주얼 스튜디오에서 이전에 작성한 Android_Hello 응용프로그램을 오픈하자.
[완성된 프로젝트 구조]
 Resource/Layout아래의 Main.axml을 오픈 후 도구상자(ToolBox)에서 Button을 드래그하여
Call Button 아래에 위치시킨 후 속성창에서 Id속성을 “@+id/CallHistoryButton”, Text
속성을 “@string/callHistory”로 설정한다.
 Resources/value 아래의 Strings.xml파일을 오픈 후 Resources 안쪽에 아래코드를 삽입하자.
<string name="callHistory">CallHistory</string>
 Main.axml 화면에서 CallHistoryButton 선택후 enabled 속성을 false로 설정하면 디
자인 화면에서 버튼이 비활성화 된다.
 전화건 내역을 저장하는 두번째 화면을 위한 Activity를 생성는데 프로젝트에 추가 -> 새항목
에서 Visual C# -> Activity(활동)를 선택, 이름을 CallHistoryActivity.cs로 하고
아래 내용으로 코드를 채우자.
 Android의 ListView를 사용하면 열거 가능한 컬렉션을 반복하고 각 데이터를 목록 항목에 표
시 할 수 있다. 목록보기는 어댑터와 함께 작동하여 데이터를 반복하고 레이아웃에 데이터를
표시하는 구조디.
 단순한 데이터를 화면에 표시하고자하는 경우 Android.Resource.Layout.SimpleListItem1과
같은 built-in list item layouts을 사용하면 된다.
 추가 -> 새항목에서 Visual C# -> Android 레이아웃을 선택, 이름을 CallHistory.axml로 하고
ListView 콘트롤을 드래그 해서 배치시키고 ID 속성은 기본값 그대로 두면 된다.
(@+id/listView1)
 MainActivity.cs 파일을 오픈해서 전화를 걸 때 전화번호를 저장하기 위한 List<string>를 위한
“System.Collections.Generic”을 import하고 phoneNumbers 라는 컬렉션 변수를 정의하자.
 MainActivity의 OnCreate 메소드앞 SetContentView 뒤부분에 CallHistoryButton의 이벤트 핸
들러를 작성하자. 혹시 Resource.Id.CallHistoryButton을 못찾으면 솔루션 탐색기에서 F5를 누
른 후 다시해보자.
 사용자가 “Make a Call을 클릭하고 “Call”을 클릭할 때 사용자 전화번호를 저장해 두기 위해
위에서 만든 켈렉션 변수 phoneNumbers에 저장하고 CallHistoryButton을 활성화하는 기능
추가를 위해 callDialog.SetNeutralButton를 수정하자.
[아래는 MainActivity.cs의 전체코드이다.]
using System;
using Android.App;
using Android.Content;
using Android.Widget;
using Android.OS;
using Android.Text;
using System.Collections.Generic;
namespace Android_Hello
{
[Activity(Label = "Xamarin Android",
MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
static readonly List<string> phoneNymbers = new List<string>();
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
Button callHistoryButton =
FindViewById<Button>(Resource.Id.CallHistoryButton);
callHistoryButton.Click += (sender, e) =>
{
// 인텐트는 액티비티의 전환이 일어날 때 호출하거나
메시지를 전달하는 매개체
// 암시적 인텐트 : 전환될 곳을 직접 지정하지 않고
액션을 적어서 사용한다.
// 명시적 인텐트 : 전환될 액티비티를 직접 적어서
표현하는 방법을 사용한다.
var intent = new Intent(this,
typeof(CallHistoryActivity));
// PutStringArrayExtra는 Intent에 전화 번호 목록을
첨부한다.
intent.PutStringArrayListExtra("phone_numbers",
phoneNymbers);
StartActivity(intent);
};
EditText phoneNumberText =
FindViewById<EditText>(Resource.Id.PhoneNumberText);
//전화걸기 버튼
Button callButton =
FindViewById<Button>(Resource.Id.CallButton);
callButton.Enabled = false;
phoneNumberText.TextChanged +=
(object sender, TextChangedEventArgs e) =>
{
if (!string.IsNullOrWhiteSpace(phoneNumberText.Text))
callButton.Enabled = true;
else
callButton.Enabled = false;
};
callButton.Click += (object sender, EventArgs e) =>
{
//Make a Call 버튼 클릭시 전화를 건다.
var callDialog = new AlertDialog.Builder(this);
callDialog.SetMessage("Call " + phoneNumberText.Text +
"?");
//"Call"을 클릭하는 경우
// 전화걸기 위한 인텐트 생성
callDialog.SetNeutralButton("Call", delegate
{
phoneNymbers.Add(phoneNumberText.Text);
callHistoryButton.Enabled = true;
// 인텐트는 액티비티의 전환이 일어날 때 호출하거나
메시지를 전달하는 매개체
// 암시적 인텐트 : 전환될 곳을 직접 지정하지 않고
액션을 적어서 사용한다.
// 명시적 인텐트 : 전환될 액티비티를 직접 적어서
표현하는 방법을 사용한다.
var callIntent = new Intent(Intent.ActionCall);
callIntent.SetData(Android.Net.Uri.Parse("tel:" +
phoneNumberText.Text));
StartActivity(callIntent);
});
//Cancel을 클릭하는 경우
callDialog.SetNegativeButton("Cancel", delegate { });
callDialog.Show();
};
}
}
}
 빌드 후 휴대폰에서 실행해 보자.
Xamarin.Android(자마린.안드로이드) HelloWorld2_크로스플랫폼 자마린교육, 자마린을 잡으세요~

More Related Content

Similar to Xamarin.Android(자마린.안드로이드) HelloWorld2_크로스플랫폼 자마린교육, 자마린을 잡으세요~

Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Sangon Lee
 
나의 첫 윈도우/맥 애플리케이션 개발하기
나의 첫 윈도우/맥 애플리케이션 개발하기나의 첫 윈도우/맥 애플리케이션 개발하기
나의 첫 윈도우/맥 애플리케이션 개발하기Devgear
 
Sencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-windowSencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-windowByoung Do Ahn
 
[KGIT_EWD]class03 0322
[KGIT_EWD]class03 0322[KGIT_EWD]class03 0322
[KGIT_EWD]class03 0322jylee6977
 
(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육
(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육
(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육탑크리에듀(구로디지털단지역3번출구 2분거리)
 
GMS 프로젝트 - Flutter
GMS 프로젝트 - FlutterGMS 프로젝트 - Flutter
GMS 프로젝트 - FlutterJongmini
 
[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본
[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본
[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본Lee Sang-Ho
 
앱 인벤터 2: 비전공자를 위한 안드로이드 앱 만들기
앱 인벤터 2: 비전공자를 위한 안드로이드 앱 만들기앱 인벤터 2: 비전공자를 위한 안드로이드 앱 만들기
앱 인벤터 2: 비전공자를 위한 안드로이드 앱 만들기위키북스
 
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)Sang Don Kim
 
(Xamarin.Android AAR 바인딩 )안드로이드 .AAR File을 자마린 바인딩 자바 라이브러리로 구현 후 Xamarin.And...
(Xamarin.Android AAR 바인딩 )안드로이드 .AAR File을 자마린 바인딩 자바 라이브러리로 구현 후 Xamarin.And...(Xamarin.Android AAR 바인딩 )안드로이드 .AAR File을 자마린 바인딩 자바 라이브러리로 구현 후 Xamarin.And...
(Xamarin.Android AAR 바인딩 )안드로이드 .AAR File을 자마린 바인딩 자바 라이브러리로 구현 후 Xamarin.And...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Youtube를활용한app만들기
Youtube를활용한app만들기Youtube를활용한app만들기
Youtube를활용한app만들기DaeHee Jang
 
안드로이드 개발하기 2nd week
안드로이드 개발하기 2nd week안드로이드 개발하기 2nd week
안드로이드 개발하기 2nd weekEunGi Hong
 
Introduction To Xaml
Introduction To XamlIntroduction To Xaml
Introduction To Xamlphoooo
 
센차 터치2 시작하기 | Devon 2012
센차 터치2 시작하기 | Devon 2012센차 터치2 시작하기 | Devon 2012
센차 터치2 시작하기 | Devon 2012Daum DNA
 
[I2max 아이투맥스] 2015 salesforce 발표자료 cloud동향에서 salesforce 앱 개발까지_ salesfroce 1...
[I2max 아이투맥스] 2015 salesforce 발표자료  cloud동향에서 salesforce 앱 개발까지_ salesfroce 1...[I2max 아이투맥스] 2015 salesforce 발표자료  cloud동향에서 salesforce 앱 개발까지_ salesfroce 1...
[I2max 아이투맥스] 2015 salesforce 발표자료 cloud동향에서 salesforce 앱 개발까지_ salesfroce 1...i2max
 
Appview 소개
Appview 소개Appview 소개
Appview 소개logeo
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 
Android Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + GenymotionAndroid Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + GenymotionYoungSu Son
 

Similar to Xamarin.Android(자마린.안드로이드) HelloWorld2_크로스플랫폼 자마린교육, 자마린을 잡으세요~ (20)

Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조
 
나의 첫 윈도우/맥 애플리케이션 개발하기
나의 첫 윈도우/맥 애플리케이션 개발하기나의 첫 윈도우/맥 애플리케이션 개발하기
나의 첫 윈도우/맥 애플리케이션 개발하기
 
2. xamarin.android 2.3 hello android multi screen example part2
2. xamarin.android 2.3 hello android multi screen example part22. xamarin.android 2.3 hello android multi screen example part2
2. xamarin.android 2.3 hello android multi screen example part2
 
Sencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-windowSencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-window
 
[KGIT_EWD]class03 0322
[KGIT_EWD]class03 0322[KGIT_EWD]class03 0322
[KGIT_EWD]class03 0322
 
(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육
(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육
(자마린안드로이드예제실습)현재 위치를 얻은 후 지도에 표시하기, GPS다루기, 마시멜로이후 권한 획득방법 구현_추천자마린학원/자마린교육
 
Designing Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom TabletDesigning Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom Tablet
 
GMS 프로젝트 - Flutter
GMS 프로젝트 - FlutterGMS 프로젝트 - Flutter
GMS 프로젝트 - Flutter
 
[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본
[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본
[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본
 
앱 인벤터 2: 비전공자를 위한 안드로이드 앱 만들기
앱 인벤터 2: 비전공자를 위한 안드로이드 앱 만들기앱 인벤터 2: 비전공자를 위한 안드로이드 앱 만들기
앱 인벤터 2: 비전공자를 위한 안드로이드 앱 만들기
 
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
 
(Xamarin.Android AAR 바인딩 )안드로이드 .AAR File을 자마린 바인딩 자바 라이브러리로 구현 후 Xamarin.And...
(Xamarin.Android AAR 바인딩 )안드로이드 .AAR File을 자마린 바인딩 자바 라이브러리로 구현 후 Xamarin.And...(Xamarin.Android AAR 바인딩 )안드로이드 .AAR File을 자마린 바인딩 자바 라이브러리로 구현 후 Xamarin.And...
(Xamarin.Android AAR 바인딩 )안드로이드 .AAR File을 자마린 바인딩 자바 라이브러리로 구현 후 Xamarin.And...
 
Youtube를활용한app만들기
Youtube를활용한app만들기Youtube를활용한app만들기
Youtube를활용한app만들기
 
안드로이드 개발하기 2nd week
안드로이드 개발하기 2nd week안드로이드 개발하기 2nd week
안드로이드 개발하기 2nd week
 
Introduction To Xaml
Introduction To XamlIntroduction To Xaml
Introduction To Xaml
 
센차 터치2 시작하기 | Devon 2012
센차 터치2 시작하기 | Devon 2012센차 터치2 시작하기 | Devon 2012
센차 터치2 시작하기 | Devon 2012
 
[I2max 아이투맥스] 2015 salesforce 발표자료 cloud동향에서 salesforce 앱 개발까지_ salesfroce 1...
[I2max 아이투맥스] 2015 salesforce 발표자료  cloud동향에서 salesforce 앱 개발까지_ salesfroce 1...[I2max 아이투맥스] 2015 salesforce 발표자료  cloud동향에서 salesforce 앱 개발까지_ salesfroce 1...
[I2max 아이투맥스] 2015 salesforce 발표자료 cloud동향에서 salesforce 앱 개발까지_ salesfroce 1...
 
Appview 소개
Appview 소개Appview 소개
Appview 소개
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
Android Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + GenymotionAndroid Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + Genymotion
 

More from 탑크리에듀(구로디지털단지역3번출구 2분거리)

[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)탑크리에듀(구로디지털단지역3번출구 2분거리)
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]탑크리에듀(구로디지털단지역3번출구 2분거리)
 

More from 탑크리에듀(구로디지털단지역3번출구 2분거리) (20)

자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
 
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
 
[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육[IT교육/IT학원]Develope를 위한 IT실무교육
[IT교육/IT학원]Develope를 위한 IT실무교육
 
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
 
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
 
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
 
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
 
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
 
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
 
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
 
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios  3.3.5 추가적인 사항
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
 
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
 
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
 
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
 
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
 
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
 
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
 

Xamarin.Android(자마린.안드로이드) HelloWorld2_크로스플랫폼 자마린교육, 자마린을 잡으세요~

  • 2. www.topcredu.co.kr 2.1 Hello Android(Xamarin.Android Application) Example  Xamarin.Android를 이용하여 전하번호를 입력받은 후 폰의 전하걸기 앱을 호출하여 전화거는 기능을 구현해 보자. (실습시 전화걸기가 권한/보안 오류로 인해 작동하지 않는다면 설정 -> 애플리케이션 관리 -> 애플리케이션 관리자를 실행하여 해당 앱을 선택하고 권한 - > 전화를 선택하여 권한을 주도록 하자)  실습환경 (Visual Studio 2015)  Visual Studio 2015를 실행하여 파일 -> 새로만들기 -> 프로젝트를 클릭 후 좌측 템플릿에서 Android -> 비어있는 앱(Blank App)을 선택하고 프로젝트 이름을 “Android_Hello”라고 입력을 하자.
  • 3.
  • 4.  프로젝트가 생성되면 우측 솔루션 탐색기의 Resources -> Layout 아래의 Main.axml을 더블 클릭하면 폰화면이 나타난다, 이 파일이 스크린의 Layout 파일이다.
  • 5.  화면 좌측에 도구상자(ToolBox)가 보이지 않으면 보기메뉴 -> 도구상자를 클릭해서 좌측 에 위치시킨 후 Text(Large)를 드래그 해서 폰화면의 상단 가운데 위치 시키고 우측하단 속성 창에서 Text 속성을 " Enter a Phone Number : ” 로 입력하자.
  • 6.  툴박스(ToolBox)에서 Plain Text 위젯을 선택 후 Text(Large) 박스 아래에 위치 시키고 id 속 성을 “@+id/PhoneNumberText”로 설정하자.
  • 7.  도구상자에서 Button을 선택해서 Plain Text 아래에 위치시키고 id 속성을 “@+id/CallButton”, Text 속성을 “Make a Call”로 설정하자.
  • 8.  “make a Call“ 버튼과 연관된 기능을 구현하는데 솔루션 탐색기에서 MainActivity.cs 파일을 오픈하자 MainActivity의 OnCreate 메소드에서 전화걸기 버튼의 기능을 구현한다. [MainActivity.cs] using System; using Android.App; using Android.Content; using Android.Widget; using Android.OS; using Android.Text; namespace Android_Hello { [Activity(Label = "Xamarin Android", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity { protected override void OnCreate(Bundle bundle)
  • 9. { base.OnCreate(bundle); // Set our view from the "main" layout resource SetContentView (Resource.Layout.Main); EditText phoneNumberText = FindViewById<EditText>(Resource.Id.PhoneNumberText); //전화걸기 버튼 Button callButton = FindViewById<Button>(Resource.Id.CallButton); callButton.Enabled = false; phoneNumberText.TextChanged += (object sender, TextChangedEventArgs e) => { if (!string.IsNullOrWhiteSpace(phoneNumberText.Text)) callButton.Enabled = true; else callButton.Enabled = false; }; callButton.Click += (object sender, EventArgs e) => { //Make a Call 버튼 클릭시 전화를 건다. var callDialog = new AlertDialog.Builder(this); callDialog.SetMessage("Call " + phoneNumberText.Text + "?"); //"Call"을 클릭하는 경우 // 전화걸기 위한 인텐트 생성 callDialog.SetNeutralButton("Call", delegate { // 인텐트는 액티비티의 전환이 일어날 때 호출하거나 메시지를 전달하는 매개체 // 암시적 인텐트 : 전환될 곳을 직접 지정하지 않고 액션을 적어서 사용한다. // 명시적 인텐트 : 전환될 액티비티를 직접 적어서 표현하는 방법을 사용한다. var callIntent = new Intent(Intent.ActionCall);
  • 10. callIntent.SetData(Android.Net.Uri.Parse("tel:" + phoneNumberText.Text)); StartActivity(callIntent); }); //Cancel을 클릭하는 경우 callDialog.SetNegativeButton("Cancel", delegate { }); callDialog.Show(); }; } } }  Application에 전화거는 기능을 활성화 시키자. Android Manifest안에 권한과 관련된 부분을 정의해야 하는데 솔루션 탐색기에서 Properties를 더블클릭하고 좌측 Android Manifest를 선택 후 하단의 Permission중 CALL_PHONE permission을 활성화 하자.
  • 11.  모든 변경사항을 저장(Ctrl+Shift+S)하고 빌드하자.(Build > Rebuild Solution)  MainActivity.cs의 Label은 응용프로그램의 스크린 최상단에 디스플레이되는 텍스트이니 필요 하다면 수정을 하면 된다. [Activity(Label = "Xamarin Android", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity {  응용프로그램의 아이콘을 설정할 수 있는데 https://developer.xamarin.com/guides/android/getting_started/hello,android/Resources/Xamari nAppIconsAndLaunchImages.zip 에서 아이콘 ZIP파일을 다운받아 적당히 압축을 풀자. 프로 젝트의 Resources -> drawable 존재하는 Icon.png 파일을 먼저 삭제후 압축푼 경로 아래 Androiddrawable 폴더의 Icon.png를 다시 선택해 주면 되는데 솔루션 탐색기 -> Ressources -> drawable 에서 마우스 우측버튼 -> 추가 -> 기존항목을 선택 후 압축 푼 경로 의 Androiddrawable 아래의 Icon.png 파일을 선택하면 아이콘이 등록된다.
  • 12.  앞에서 다운 받은 파일의 Androiddrawable* 폴더들을 프로젝트로 복사하면 되는데 drawable 폴더를 제외한 모든 폴더를 복사 후 프로젝트의 Resources 아래에 붙여넣자.
  • 13.  다음은 Android Manifest안에 아이콘을 등록하면 되는데 솔루션 탐색기의 Properties 더블클 릭 -> 왼쪽에서 Android Manifest를 선택 후 나타나는 화면의 Application Icon 메뉴에서 @drawble/Icon을 선택하자.  이제 에뮬레이터, 또는 안드로이드폰으로 테스트를 해보자. Properties를 더블클릭 후 좌측 Application 에서 API LEVEL 23(mashimallow)로 설정하고 이뮬 레이터를 실행했다. 상단의 실행단추를 눌러 실행하자.
  • 14.
  • 15.
  • 16. [에뮬레이터 실행화면]  폰으로 테스트 하기 위해서는 휴대폰을 USB로 연결 후 폰에서 USB 디버깅을 활성화 해야 되는데 휴대폰 상단 설정을 클릭하고 더보기 -> 개발자옵션 ->USB 디버깅을 체크하자. 또는 갤럭시 S4이후, 안드로이드4.2 젤리빈 이후의 폰들은 개발자 옵션이 비활성화 되어있으므로 설정 -> 디바이스 정보 -> 빌드번호 를 7번 클릭하면 “개발자 모드가 실행되었습니다” 라는 메시지가 나오면서 개발자 모드가 활성화 된다. 개발자 모드를 활성화하면 USB 디버깅도 같
  • 18. 2.2 Hello Xamarin Android 구조?  Properties : 응용프로그램 이름, 버전, 접근권한과 같이 Xamarin.Android Application 요구사항 들을 설명하는 AndroidManifest.xml을 포함하고 있으며, 자기자신 어셈블리를 서술하는 AssemblyInfo.cs 파일도 제공한다.  참조 : 응용프로그램이 참조하는 내부, 외부 어셈블리(.DLL)을 지정한다. System, System.Core, System.Xml 같은 닷넷 어셈블리들과 Xamarin Mono.Android 같은 어셈블리들에 대한 참조들 을 포함한다.  Components : Xamarin Components store, Xamarin code용 공개 마켓플레이스를 제공하기 위 한 폴더, Xamarin Components는 Xamarin.iOS 및 Xamarin.Android 응용 프로그램에서 사용할 다양한 구성 요소를 제공하고 구성 요소는 사용자 인터페이스 컨트롤에서 코드 라이브러리, 사용자 인터페이스 테마까지 다양하다. Xamarin을 기반으로하는 응용 프로그램을 사용하면 풍부한 사용자 경험을 생성하고 거의 모든 작업을 수행하여 여러 가지 타사 서비스와 통합 할 수 있다.  Assets : 폰트, 로컬 데이터 파일, 텍스트파일과 같이 어플리케이션 실행에 필요한 파일들 포 함하고 여기에 해당하는 파일들은 생성된 Assets 클래스를 통하여 접근 가능하다.  Resources : Strings, 이미지, 레이아웃과 같은 리소스들을 담고 있으며 생성된 Resource 클래 스를 통해 코드로 접근 할수 있다.
  • 19. 2.2.1 Resources  Resources 디렉토리는 Resource.Designer.cs파일과 drawable, layout, values의 폴더를 담고 있 다.  drawable : 이미지, 비트맵등 drawable resources를 제공한다. 기본 템플릿에서는 drawable폴 더는 application 아이콘 파일(Icon.png)를 제공한다.  layout : 스크린 또는 액티비티용 User Interface를 정의하는 Android designer 파일들(.axml) 담고 있다. 안드로이드 템플릿에서는 Main.axml이라는 기본 레이아웃을 제공해 준다.  Resources.Designer.cs : Resource class로 알려져 있는 이 파일은 각 리소스에 할당된 unique ID를 담고 있는 부분 클래스(Partial Class) 파일이다. Xamarin.Android tools가 자동으로 생성되 며 필요할때 재성성된다. 이 파일은 직접 수정할수 없고 Xamarin.Android에서 UI 변경변 발 생될 때 마다 자동으로 수정된다.
  • 20. 2.2 Hello Android MultiScreen Example  이전 Android_Hello 프로젝트에 전화건 내역을 저장하는 화면과 로직을 추가해 보자.  비주얼 스튜디오에서 이전에 작성한 Android_Hello 응용프로그램을 오픈하자. [완성된 프로젝트 구조]  Resource/Layout아래의 Main.axml을 오픈 후 도구상자(ToolBox)에서 Button을 드래그하여 Call Button 아래에 위치시킨 후 속성창에서 Id속성을 “@+id/CallHistoryButton”, Text 속성을 “@string/callHistory”로 설정한다.
  • 21.  Resources/value 아래의 Strings.xml파일을 오픈 후 Resources 안쪽에 아래코드를 삽입하자. <string name="callHistory">CallHistory</string>  Main.axml 화면에서 CallHistoryButton 선택후 enabled 속성을 false로 설정하면 디 자인 화면에서 버튼이 비활성화 된다.
  • 22.  전화건 내역을 저장하는 두번째 화면을 위한 Activity를 생성는데 프로젝트에 추가 -> 새항목 에서 Visual C# -> Activity(활동)를 선택, 이름을 CallHistoryActivity.cs로 하고 아래 내용으로 코드를 채우자.
  • 23.  Android의 ListView를 사용하면 열거 가능한 컬렉션을 반복하고 각 데이터를 목록 항목에 표 시 할 수 있다. 목록보기는 어댑터와 함께 작동하여 데이터를 반복하고 레이아웃에 데이터를 표시하는 구조디.  단순한 데이터를 화면에 표시하고자하는 경우 Android.Resource.Layout.SimpleListItem1과 같은 built-in list item layouts을 사용하면 된다.  추가 -> 새항목에서 Visual C# -> Android 레이아웃을 선택, 이름을 CallHistory.axml로 하고 ListView 콘트롤을 드래그 해서 배치시키고 ID 속성은 기본값 그대로 두면 된다. (@+id/listView1)
  • 24.  MainActivity.cs 파일을 오픈해서 전화를 걸 때 전화번호를 저장하기 위한 List<string>를 위한 “System.Collections.Generic”을 import하고 phoneNumbers 라는 컬렉션 변수를 정의하자.
  • 25.  MainActivity의 OnCreate 메소드앞 SetContentView 뒤부분에 CallHistoryButton의 이벤트 핸 들러를 작성하자. 혹시 Resource.Id.CallHistoryButton을 못찾으면 솔루션 탐색기에서 F5를 누 른 후 다시해보자.
  • 26.  사용자가 “Make a Call을 클릭하고 “Call”을 클릭할 때 사용자 전화번호를 저장해 두기 위해 위에서 만든 켈렉션 변수 phoneNumbers에 저장하고 CallHistoryButton을 활성화하는 기능 추가를 위해 callDialog.SetNeutralButton를 수정하자. [아래는 MainActivity.cs의 전체코드이다.] using System; using Android.App; using Android.Content; using Android.Widget; using Android.OS; using Android.Text; using System.Collections.Generic; namespace Android_Hello { [Activity(Label = "Xamarin Android", MainLauncher = true, Icon = "@drawable/icon")]
  • 27. public class MainActivity : Activity { static readonly List<string> phoneNymbers = new List<string>(); protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // Set our view from the "main" layout resource SetContentView (Resource.Layout.Main); Button callHistoryButton = FindViewById<Button>(Resource.Id.CallHistoryButton); callHistoryButton.Click += (sender, e) => { // 인텐트는 액티비티의 전환이 일어날 때 호출하거나 메시지를 전달하는 매개체 // 암시적 인텐트 : 전환될 곳을 직접 지정하지 않고 액션을 적어서 사용한다. // 명시적 인텐트 : 전환될 액티비티를 직접 적어서 표현하는 방법을 사용한다. var intent = new Intent(this, typeof(CallHistoryActivity)); // PutStringArrayExtra는 Intent에 전화 번호 목록을 첨부한다. intent.PutStringArrayListExtra("phone_numbers", phoneNymbers); StartActivity(intent); }; EditText phoneNumberText = FindViewById<EditText>(Resource.Id.PhoneNumberText); //전화걸기 버튼 Button callButton = FindViewById<Button>(Resource.Id.CallButton); callButton.Enabled = false; phoneNumberText.TextChanged += (object sender, TextChangedEventArgs e) =>
  • 28. { if (!string.IsNullOrWhiteSpace(phoneNumberText.Text)) callButton.Enabled = true; else callButton.Enabled = false; }; callButton.Click += (object sender, EventArgs e) => { //Make a Call 버튼 클릭시 전화를 건다. var callDialog = new AlertDialog.Builder(this); callDialog.SetMessage("Call " + phoneNumberText.Text + "?"); //"Call"을 클릭하는 경우 // 전화걸기 위한 인텐트 생성 callDialog.SetNeutralButton("Call", delegate { phoneNymbers.Add(phoneNumberText.Text); callHistoryButton.Enabled = true; // 인텐트는 액티비티의 전환이 일어날 때 호출하거나 메시지를 전달하는 매개체 // 암시적 인텐트 : 전환될 곳을 직접 지정하지 않고 액션을 적어서 사용한다. // 명시적 인텐트 : 전환될 액티비티를 직접 적어서 표현하는 방법을 사용한다. var callIntent = new Intent(Intent.ActionCall); callIntent.SetData(Android.Net.Uri.Parse("tel:" + phoneNumberText.Text)); StartActivity(callIntent); }); //Cancel을 클릭하는 경우 callDialog.SetNegativeButton("Cancel", delegate { }); callDialog.Show(); }; } } }
  • 29.  빌드 후 휴대폰에서 실행해 보자.