Manifests

Xamarin.Android의 Manifests설정은 Java와 약간, 아니 좀 많이 다릅니다.

Java Manifests의 <activity ~ /> 부분이 아래와 같이 사실상 각 cs파일 상단에 들어간다고 생각하시면 됩니다.

[Activity(Label = "자마린 ㄴㄴ", MainLauncher = true, Icon = "@drawable/icon")]

Xamarin으로 Android를 처음 만난 분을 위해 설명하자면,

Lable은 액티비티의 타이틀, MainLauncher는 앱 시작 페이지를 이 액티비티로 지정(당연히 true지정된 액티비티는 한 앱에 하나만 존재해야 합니다, Icon은 액티비티의 아이콘입니다.


Button

//버튼 선언

Button button = FindViewById<Button>(Resource.Id.Button);

//클릭 이벤트 등록은 자바의 리스너가 아닌 Event방식을 사용합니다

//이벤트 등록 방식 1번 button.Click += (object sender, EventArgs e) => {     Console.WriteLine("button이 눌러졌습니다"); //로그에 찍힙니다. log.d도 가능. };


//이벤트 등록 방식 2번, delegate를 이용해 간단한 처리를 한줄에 구현합니다.

button.Click += delegate { Console.WriteLine("button이 눌러졌습니다"); };


//이벤트 등록 방식 3번, OnCreate등에서 이벤트 메소드만 지정하는 방식입니다

//여러 버튼이 하나의 동작을 공유하는 것도 가능합니다

button.Click += button_Click;

void button_Click(object sender, EventArgs e)

{

//동작

}


//응용. 리스트뷰의 경우.

listView.ItemClick += delegate(object sender, AdapterView.ItemClickEventArgs e) \

{

//응용2. 클릭된 아이템의 text를 얻는다. custom ListView일 경우에는

//GetItemAtPosition의 재정의가 필요.

String text = listView.GetItemAtPosition(e.Position);

};


Dialog

//translatedNumber이라는 변수에 저장된 번호로 전화거는 다이얼로그 예제

var callDialog = new AlertDialog.Builder(this);

callDialog.SetMessage("Call" + translatedNumber + "?");//이 번호로 전화할건가?셋 메세지 callDialog.SetNeutralButton("Call", delegate {     var callIntent = new Intent(Intent.ActionCall);//전화 인텐트 callIntent.SetData(Android.Net.Uri.Parse("tel:" + translatedNumber)); StartActivity(callIntent); });


//List형식의 다이얼로그 예제


string[] titleMenu = { "사과", "메론" };

AlertDialog.Builder alert = new AlertDialog.Builder(activity);

alert.SetTitle("먹을 과일 선택"); //제목

alert.SetItems(titleMenu, (o, e) => //object, sender

{ // ↑ string xml 파일의 리스트를 여기에 써 줘도 됩니다.

//사과0,메론1

if (e.Which == 0)

{

System.Console.WriteLine("사과를 먹었습니다");

}

else if (e.Which == 1)

{

System.Console.WriteLine("메론을 먹었습니다");

}

});

alert.Show();


//다이얼로그 밖을 터치해서 닫을 수 있는 다이얼로그

//당연히 그런 거 아니야? 라고 생각할 수 있지만, Create 없이 그냥 바로 생성하면

//일부 안드로이드 버전에선 잘 되는데 일부에선 해당 기능이 동작하지 않는다....

//고객에게 간 버전에서만 안 될수 있다는 이야기.

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.SetTitle("정말 삭제하시겠습니까?");

builder.SetPositiveButton("예", delegate{ //positive work });

builder.SetNegativeButton("아니오", delegate { });

AlertDialog alert = builder.Create();

alert.SetCancelable(true);//취소 가능한 다이얼로그로 설정

alert.SetCanceledOnTouchOutside(true);//화면 밖을 터치해서 취소가 가능하게 설정

alert.Show();



다이얼로그 참조 링크 여기


기타 Java로 Android 개발하던 개발자가 C#으로 개발할 때 헷갈릴만한 사항들 메모.


커스텀 레이아웃 네임스페이스는 apk/res 가 아닌 apk/lib를 써야 한다

xmlns:yourApp="http://schemas.android.com/apk/lib/com.yourAppPackege.yourClass"


xml에서 커스텀 레이아웃을 사용할때는 네임스페이스를 사용해야 한다

패키지.경로.클래스명

EAppAndroid.Protype.LeftDrawerMenu2 

<EAppAndroid.Protype.LeftDrawerMenu2.OpendCheckLinearLayout



프래그먼트에서 어레이 어댑터 만들기

 ArrayAdapter adapter = new ArrayAdapter<string>(Activity,Android.Resource.Layout.SimpleListItem1, items);

다음과같이 this가 아닌 Activiti로 해줘야 한다

참고 http://arteksoftware.com/androids-built-in-list-item-layouts/

Posted by 안드로메다에서 온 프로그래머