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/
댓글을 달아 주세요