PROGRAMMING WORKSHOP

Skip Navigation Links. Skip Navigation Links.

Android|
Button하나 만들어 보면서 지능을 심어 보자..

Button을 하나 설치하는 것은 쉽다
그냥 도구상자에서 버튼을 하나 끌어다 놓던가..
아니면 xml화일에서 xml구문으로 작성하던가
문제는 버튼을 크릭하면 어떤 일이 벌어지게 할 것인지는 여러분의 상상력이다
메시지박스를 띄울까??
메시지박스를 띄우려면 VBA에서는 Msgbox "...." 라고 하면 되었는데
안드로이드 폰에서는 Java에서는 어떤 메소드를 띄울까???가 아니고
어떤 개체를 불러서 메시지를 띄울까??라고 생각하는것이 맞다
항상 개체를 생각해야 한다..VBA에서는 그냥 MsgBox 라는 함수를 불러서 사용했다
아무튼 그렇게 하나 만들어 보면서 따져 보도록 하자

VBA에서는 프로시져와 함수두가지로 나누어져있다
Sub xxx()
...
...
End Sub

Function vvv()
...
...
vvv=결과값
End Function

Java에서는 함수 한가지이다..이것을 그냥 메소드라고 부른다

아래와 같이 void라는 키워드가 붙어 있을때는 결과값이 없는 VBA의 Sub 프로시져에 해당한다

void xxx{
   ...
   ...
   ...
}

void대신에 정보의 타입으로 표현되면 결과값을 돌려주는 VBA의 함수에 해당한다

boolean vvv{
   ...
   ...
   ...
return 결과값
}

항상 정보의 타입을 뒤에 붙이지 않고 앞에 붙인다는 점..
그리고 모듈시트는 없고 전부 크래스모듈이라고 하였다
위의 메소드들은 모두 하나의 크래스모듈내에 들어가 있다..
그래서 처음 안드로이드 프포젝트를 만들고 자동생성된 MainActivity.java 라고 하는
크래스모듈을 열면 아래와 같이 되어 있다



좀 복잡해 보이지만...좀 낯섫어서 그렇지 참 편리한 형식이라는 것을 알게 된다

안드로이드폰의 코딩은 대개가 이미 만들어진 크래스를 상속받아서
새로운 개체를 만든다 Extends 라는 키워드가 extends 오른쪽개체를
상속받는다고 지정하는 것이다..그러면 상위개체의 메소드를 자체의 메소드같이
마음대로 사용할수 있게 된다
VB.Net에서의 상속을 받는 다고 할때 Inherits 라는 키워드를 사용한 것과같은 것이다
java에서는 상위개체의 내용을 확장(extends)하여 사용하겠다고 하고
vb.net에서는 상위개체의 내용을 상속(inherits)하여 사용하겠다고 하는 것이니
그소리가 그 소리다!!
너무 복잡하게 생각할 것 없고 우선 화면을 구성하는 크래스모듈은 항상
Activity라는 안드로이드가 제공하는 내장된 크래스를 상속받아서
크래스모듈을 구성하고 있다는 것으로 알고 있으면 된다

이벤트프로시져라고하는 것이 VBA에는 있지만
그냥 Java에서는 메소드라고 부른다..CallBack 메소드 혹은 그냥 메소드
함수 프로시져와 섭프로시져와 구분이 되어 있어서 헷갈릴 것도 없다
모두 함수형식으로 만들어진 메소드라고 보시면 된다
위의 그림의 두번째 메소드인 onCreateOptionMenu(){} 메소드로 무엇이 만들어졌을까..
앞페이지에서 멍청한 App을 띄우신후 눈썰미가 있으신분은
메뉴가 어디에 떴었는지 알수 있을 것이다
폰의 왼쪽하단 기본메뉴버튼을 크릭하면 Setting이라는 메뉴하나가 달랑나타난다
바로 이것을 만든 것이다



Inflater라는 단어가 재미있지 않은가..flat은 타이어 바람이 빠진것
이것을 In-Flat하면 바람을 넣는것..
그러니 xml로 작성된 옵션메뉴는 아직 바람이 안들어간 상태..
그러니 나를 불러서 바람을 넣으시면 메뉴가 만들어 집니다!!!
그것이 Inflater개체...자전거 바람넣는 펌프가 곧 Inflater..!!
단어하나 챙기고..그냥 안드로이드개체 하나 챙기고!!!

우선 버튼을 4개를 만들어 보자
그냥 아래의 xml문을 모두 복사하여 activity_main.xml화일에
붙여 넣는다
(여러분이 만든 프로젝트에서 기본 Activity 인터페이스화일명을 다르게 만들었을수도 있으니
기본 초기화면용 xml화일에 붙여 넣는다
버튼을 일일이 끌어다가 그리는 것 보다 숙달되면 xml문을 작성하는 것이 편하다

<?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" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Alert Box Sample" android:layout_marginTop="15dp" android:id="@+id/btnAlert" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Toast Sample" android:layout_gravity="center" android:layout_marginTop="15dp" android:id="@+id/btnToast" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="15dp" android:text="Yes/No InputBox Sample" android:id="@+id/btnYesNo" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="15dp" android:text="Progress Sample" android:id="@+id/btnProgress" /> </LinearLayout>

xml화일는 웹페이지를 꾸미는 html 언어나 모두 같은 뿌리를 갖고 있는
MarkUp-Language이다 그래서 위의 내용을 어떤 장치를 하지 않고 그대로
웹페이지에 붙여 넣으면 아래과 같이 Button 4개가 만들어진다
이유는 androlid layout 용 xml화일상의 Button이라는 Tag를 html에서
자신의 언어로 읽어서 해석하여 버튼을 만들어 놓아서 아래와 같이 쌩뚱맞게 버튼을
그려 놓는 것이다...html문이나 xml문이나 같은 뿌리라는 것을 보여드리기 위한 것이니 무시하시고..


 
    
       

위와 같이 입력하시고 저장한후 Graphical Layout모드로 보시면
버튼이 그려져 있는 것을 볼수 있다
이제 이 xml화일을 끌어다가 생명을 불어 넣을 쟈바크라스화일..
디폴트로 만들어진 MainActivity.java에 코딩을 한다

아참...VBA같이 버튼 만들고 OnAction 속성에 프로시져명 주고 하면 되는 것..뭐 그런 것 없나요???
라는 질문을 하신다면 좋은 질문!!!
맞다..딱 똑 같은 속성 onClick이라는 것이 있다
android:onClick="프로시져명"
와 같이 하고 크래스모듈에 해당 프로시져가 있으면 된다

그러나 쟈바에서는 크래스모듈이 주체가 되는 것이 좋다
xml화일에서 크래스모듈을 지정하는 것은 좀 융통성이 없어지는 프로그래밍일수도 있다
물론 필요할때 사용하면 된다
여기에서는 크래스모듈이 주체가 되어서 xml화일을 불러서 마음대로 사용해보자
엑셀에서 수도 없이 경험했으니까..알겠지만
개체를 찾는 것이 ( 개체를 참조하는 것, Referencing, 이 프로그래밍의 반이다)
버튼을 크래스모듈에서 인식하여야 한다..이름을 불러서 갖여 오나
ID를 불러서 갖여오나?? ID를 사용하여 갖여 온다
앞페이지에서 이야기하였듯이..모든 개체가 만들어지고 ID가 부여 되면
개체가 모두 R.java라는 크래스모듈에서 죄다 관리가 된다고 이야기했었다
R.Id. 라고 한후 ID이름을 주면 접근한다

위의 xml문에서 Button개체의 ID속성에 붙여준 내용을 보면
android:id="@+id/btnYesNo"
이때 @+id/주고싶은ID명
@는 AT라는 것이고 id는 반드시 +를 붙여준다..계속 추가 되어 간다는 의미인것이다
아무튼 위와 같은 문법으로 주면 된다
이렇게 부여된 것은 R.java 등록소에 모두 보관되는데 이때 모두 숫자값으로
주민 번호를 부여 받게 되는 것이다..
그리고 이것을 크래스모듈에서 참조하게 된다

엑셀에서 이름을 지어서 사용하는 것이나 마찬가지 컨셉이다

MainActivity.java 크래스모듈의
onCreate() 메소드에
Button oAlert= (Button) findViewById(R.id.btnAlert); 와같이 작성하는 것이 아래의 VBA의

Dim oAlert As Button
Set oAlert=findViewById(R.id.btnAlert)

와 같은 내용이다
쟈바언어는 VB보다 나중에 만들어진 것인지라..언어적 측면에서 가장 최근의
것이라고 보아도 좋으니 단축적인 표현이 훨씬 많다
VB는 주저리..주저리..죄다 말하듯이 떠들어 대지만(그래서 쉽다고 할 수 있고)
C++이나 Java등의 언어는 무척 단축적이라서 부호적이라고 볼수 있을 것이다
물론 VB.Net에서는 위와 같은 최근언어들의 좋은 점을 최대한 수용하여
거의 경계가 없어졌다고 보아도 된다

그래서 위와 같이 한줄로 표현한다
또한 대문자,소문자 반드시 맞추어서 표현하여야 한다
한줄 한줄은 반드시 세미코론을 붙여서 명령 한 줄 맞추었다는 표시를 해주어야 한다
그런데 위와 같이 작성하면 Button이라는 개체명아래 물결표시의 기분나쁜 표시가
나타난다..아래의 그림과 같이



그리고 마우스를 살짝 Button이라는 글자위로 올리면 메시지박스가 뜬다
Button이라는 이상한 이름을 사용하였는데 몇가지 가능한 권고메시지를 띄우는 것이다
가장 유효한 권고는 첫번째 Import Button 이라는 것을 받아들어야 한다,
이 말은 무엇이냐 하면 Button을 사용하려면 Button을 만들어주는 내장된 크래스(개체)를
Import 즉 참조시키라는 이야기다
무척이나 알뜰살뜰한 방법인 것이다
사용할 것만 끌어다가 써라 이것이다
TV를 고치는데 TV를 고치기 위한 연장만 준비하면 되었지..
Radio를 고치는 연장은 필요없는 것이다
이런 저런 도구상자를 등짐을 지고 안드로이드 앱으로 뜨면 이 앱이 무겁겠는가??
가볍겠는가??? 최대한 필요한 도구만 챙기고 길을 떠나라!!라는 이야기다
버튼개체를 만들려고 하시는 모양인데..Button을 만들 연장이 없으니
연장을 Import 시키라는 조언인 것이다
물론 이 조언을 안들으면 ..에러가 나고 뜨지 못하는 것은 당연!!!
Import Button을 크릭하면 크래스모듈의 선언부에
import android.widget.Button;
이라고 자동작성되는 것을 볼수 있다..이제 참조가 된 것이다
그리고 Button 이라는 단어밑의 기분나쁜 물결표시도 사라지고!!
그런데 이것은 어디에서 갖여 오나
아래 그림과 같이 개발을 할때 도구상자가 좌악 좌판을 벌려준다
프로젝트창(패키지창)의 Android 폴더명을 열면 줄줄이 도구상자들이 들어 있는 것이다



이속에 여러분이 현재있는 좌표를 찾는 것도 있고, 전화를 하는 것도 있고
그림을 다루는 것도 있고..그중의 하나 Button크래스를 하나 끌어다
놓고 나의 프로젝트에서는 이놈이 필요하다!! 라고 사용하는 것이다
이것이 콤파일될때는 Import된 것만 둘둘 바이너리로 바뀌게 되는 것이다
이것도 물론 죄다 등짐을 지고 가는 것이 아니고..
사용자의 전화기속에 OS에 있는 버전에 맞는 Button개체의 것에
접근하는 코드를 갖고 가는 것..
그러니 사용자전화기의 버전과 개발자의 버전이 다르다면 안돌아가겠지

Java문법중 낯섫은 것은 아래와 같은 것도 있다
Button oAlert= (Button) findViewById(R.id.btnAlert)
개체를 만들어 내는 앞에 (Button)은 뭔가..
Type Casting이라고 하는 것이 있다
VBA에서는 Variant타입이라는 것이 있어서 정보의 타입을 지정하지 않으면
그냥 너그럽게 Variant타입으로 해준다
Java는 무지 깐깐하여 뻔히 Button타입인줄 아는데도 앞에 (Button)이라고 해주는 것은
지금 만드는 개체는 Button타입정보라는 것을 명백히 표현해주자는 것이다
findViewById(...)로 하여 갖여 오는 개체는 Button이 될수도 있고..아니면
Image콘트롤일수도 있고 어떤 개체를 갖여올지 현재는 알 수가 없는 것이다
그래서 명시적으로 (Button) 즉 Button개체를 갖여 오는 것이라고 밝혀주는 것이다

이 정보타입의 엄격함은 VBA를 제외한 대개의 언어들이 그렇다
그러니 ..좀 헐렁한 환경에서 빡빡한 환경으로 가는 것 같지만
그것이 실은 원칙이고 나중에 문제가 없고, 좋은 소루션이 된다
반복되는 이야기지만 이런 빡빡한 환경의 언어를 즐긴후 VBA를 한다면
좀더 좋은 코딩을 하는 습관을 얻을수 있을 것이다
그런데 Button 개체를 만들기는 만들었는데..이벤트프로시져를 만들어야 한다
버튼을 크릭하였을때..어떻게 하라는 프로시져가 준비 되어야 할 것이다
쉬운 방법이 있지만, 가장 복잡한 방법으로 해보도록 하자
그런 후 쉬운 방법을 알아야 행복함을 느낀다..
처음에 빡쎈것이 좋다

아래의 그림과 같이 차근차근 하여 보시기 바란다



그림에서 이벤트프로시져라고 하였지만..Java에서는 그냥 메소드라고 한다
이런 저런 구분없이 그냥 메소드, 조금 붙인다면 CallBack 메소드
용어의 헷갈림은 별문제 없다
그냥 컨셉이 중요한 것!!
개체쓰고 쩜찍고 조금 기다리면 친절한 목록이 나타나니까..
선택후 엔터키를 때리면 모든 것이 자동 입력되니까..편리하다
VBA에서도
ActiveSheet 라고 한후 쩜을 찍으면 아무것도 나타나지 않는다
왜냐면 VBA편집기가 ActiveSheet를 워크시트로 아직 해석하지 못하고 있기 때문이다
만약 Java같은 환경에서 명백한 개체선언 습관이 든다면 아래와 같이 할 것이다

Dim shtX As Worksheet
Set shtX=ActiveSheet

라고 한후 shtX 하고 쩜을 찍으면 Worksheet개체에 대한 목록을 줄줄이 보여 준다
즉 명백하게 개체로 지정을 해주는 습관은 VBA편집기가 친절하게 얼릉 알아서
해당 개체의 족보를 보여주는 것이다
VBA에서도 개체를 명백히 지정해 주는 습관을 붙이시기를!!!

이름도 흥미롭다
이벤트가 아닌..OnClickListener
크릭할때 듣고 알아서 하겠다는
이름이 아닌가...Listener..영어도 같이 즐기시면서 하시면 더더욱 좋다

아마도 영어회화를 잘 하려면 Set이나 Get을 정말 많이 사용하게 된다
그런데 java의 거의 모는 메소드가 Set이나 Get으로 시작된다
좋은 Set, Get의 습관이 될 것이다
물론 특별한 작업의 경우는 또 다른 이름이 있지만 일반적으로 그렇다
어디서 갖여 오는 것은 Get으로 시작하고
어떻게 설치하고 세팅하고 값을 주는 것은 Set으로 시작하고
정보라는 것이 쓰고(Set, Write) 읽는(Get, Read) 것 밖에 더 있는가..??
프로그래밍의 컨셉이 좀더 강력하게,재미있게 자리 잡아 갈 것이다
VBA에서도 이름이 좋은 것이 생각나지 않을때는 그냥 Set을 할 것인가
아니면 Get을 할 것인가의 컨섭부터 잡으면 된다

만들어진 onClick 메소드를 아래와 같이 완성한다
그리고 실행시키고 첫번째 버튼을 크릭해 보시기 바란다

public void onClick(View v) { AlertDialog.Builder oMsg = new AlertDialog.Builder(MainActivity.this); oMsg.setMessage("Congratulation, Your First Try!!"); oMsg.setTitle("UNO-WORKSHOP | ANDROID"); oMsg.show(); }

아래의 그림과 같이 버튼의 첫번째것을 크릭하면 오른쪽과 같은 메시지박스가 떴다



처음 무언가 실행해 본 것이다

무엇을 하던 개체를 만들어야 하는 습관을 갖여야 한다
메시지 박스를 어떤 개체에서 띄우지???
이런 의문부터 갖으면 된다
엑셀프로그래밍에서도 엑셀개체를 사용하는 것이지만,,, 다른 개체지향적프로그램과 같이
실감이 나지 않지만, Java등에 들어오면 개체,개체,죽어도 개체!!를 머리에 두고 살아야 한다
AlertDialog.Builder oMsg = new AlertDialog.Builder(MainActivity.this);
요것도 개체를 생성한 것이다
oMsg라는 변수에 AlertDialog.Builder 개체를 만든 것이다..Builder개체!!
이렇게 개체를 만들고
oMsg 변수명 치고 쩜찍고 잠시 기다리면 다양한 멤버목록이 나타난다
setTitle()
setMessage()
show()
등 모두 Builter 개체의 메소드나 속성들인 것이다
그냥 보면..setTitle ..흠 메시지 박스의 제목을 넣으라는 것이구나!!
...setMessage...아..메시지 박스에 띄울 내용을 넣으라는 것이구나!!!
...show...아..끝났으니 띄우라는 것이구나...!!
와 같이 직관적으로 알수 있는 멤버목록이 나타난다

AlertDialog.Builder(MainActivity.this) 개체를 생성할때 매개변수를 전달했다
개체지향프로그래밍에서 개체를 생성할때 매개변수를 전달 하는 경우가 있다
크래스의 Constructor 라고 하는 특별한 메소드에 전달 하는 것이다
즉 어디에서 띄울 것인지..Context를 매개변수로 전달하여야 하는데
여기에서는 MainActivity.this 로 전달한다
this라는 키워드는 엑셀에서 각워크시트에 접근할수 있는 Me 에 해당하는 키워드이다

아.@#$.씨...그냥 VBA에서 처럼 msgbox 함수에 하면 안되나??!@#
좀 복잡해 보이지만 개체지향의 즐거움을 맛보기 시작하면 습관이 될 것이니
꾸준히 차근,차근 하시면 ...사람이 그럴듯 해질 것이다!!
다음은 Toast개체로 메시지박스를 띄워보자..
Toast..이름이 재미있지 않은가..토스트빵같이 톡 튀어 나온다고 Toast라고 지은 모양이다



아래와 같이 Toast개체를 생성하고
Toast toast = Toast.makeText(MainActivity.this,"UNO-WORKSHOP | Toast Sample...",Toast.LENGTH_LONG);
toast.show();

이것을 아래와 같이 작성해도 된다
Toast.makeText(MainActivity.this, "UNO-WORKSHOP | Toast Sample...", Toast.LENGTH_LONG).show();

또한 Toast라고 입력하면 밑에 물결모양의 밑줄이 쳐질 것이고 목록상자가 나타나는 것에서
Import Toast라는 항목을 크릭하여 Toast크래스를 Import시키면 사라진다
이 Toast개체는 지정된 시간 마지막 매개변수..Toast.LENGTH_LONG 상수로 정해준
시간이 지나면 자동을 사라지는 특별한 알림(Notification)메시지 박스이다
이제 Yes, No라는 값을 받아들일수 있는 대화상자를 만들어 보자
실은 위의 박스와 같은 것인데..Yes, No라는 버튼이 달리고 이것에 대한 이벤트프로시져(메소드)가
추가되는 것만 다를 뿐이다
대화상자가 뜬후, Yes, No버튼을 크릭하면 Toast상자가 뜨게 하고 화면의 바탕색을
바꾸어주는 것을 해보자



위에서 Button oBtn = (Button) findViewById(...) 라고 하면 변수에 개체를 담았었다
그런데 엑셀에서도

Dim oSht As Worksheet
Set oSht=Worksheet.Add
oSht.Name="...."

라고 한 것을 아래와 같이 한 줄로 표기 하기도 했었다

Worksheet.Add.Name="...."

마찬가지로 쟈바에서도 ..

findViewById(R.id.main_activity).setBackgroundColor(Color.GRAY);

와 같이 변수없이도 할 수 있다는 것을 생각하시면서....

또한 엑셀에서 oBook.Name="..." 와 같이 속성값을 주는 것을..
쟈바에서는 oBook.setName(...) 와 같이 set이라는 접두어를 앞으로 둔 메소드를 흔히
사용한다는 점..
이제 마지막으로 정보를 기다리기 위하여 기다릴때 ..표시를 해주는 Progress 표시를
하는 메시지 박스를 띄워 보자



애고..버튼 하나만 쌤플로 올린다고 해놓고..욕심이 많아서 다양한 대화상자를
띄우 보았다..
너무 어렵게 생각하지 마시고 아래의 코드를 그대로 복사하여 옮기고 실행시켜보시면서
한줄, 한줄 생각하시면..차근차근 여러분들의 것이 될 것이다

MainActivity.java 모듈시트에 아래를 옮긴다
(여러분들의 메인크래스명이 MainActivity.Java가 아니여도 첫화면(메인)에..)



아래 package명은 여러분프로젝트의 패키지명으로 확인하여 위의 그림과 같이 바꿔주시고..

package com.uno.myfirstapp; /////////////////////////////////// import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.graphics.Color; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // AlertButton( Message Button) Start//////////////// Button btnX = (Button) findViewById(R.id.btnAlert); btnX.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { AlertDialog.Builder oMsg = new AlertDialog.Builder(MainActivity.this); oMsg.setMessage("Congratulation, Your First Try!!"); oMsg.setTitle("UNO-WORKSHOP | ANDROID"); oMsg.show(); } }); // AlertButton End////////////////////////////// // TOAST Button Start////////////////////////// Button btnToast = (Button) findViewById(R.id.btnToast); btnToast.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //Toast.makeText(MainActivity.this, "UNO-WORKSHOP | Toast Sample...", Toast.LENGTH_LONG).show(); Toast toast = Toast.makeText(MainActivity.this,"UNO-WORKSHOP | Toast Sample...",Toast.LENGTH_LONG); toast.show(); } }); // TOAST Button End /////////////////////////////// // YES-NO Button Start /////////////////////////// Button btnYesNo = (Button) findViewById(R.id.btnYesNo); btnYesNo.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { AlertDialog.Builder alertbox = new AlertDialog.Builder(MainActivity.this); alertbox.setMessage("UNO-WORKSHOP | YES-NO"); alertbox.setPositiveButton("예", new DialogInterface.OnClickListener() { // do something when the button is clicked public void onClick(DialogInterface arg0, int arg1) { findViewById(R.id.main_activity).setBackgroundColor(Color.GRAY); Toast.makeText(getApplicationContext(), "'예' 버튼을 크릭하였습니다", Toast.LENGTH_SHORT).show(); } }); alertbox.setNegativeButton("아니요", new DialogInterface.OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { findViewById(R.id.main_activity).setBackgroundColor(Color.RED); Toast.makeText(getApplicationContext(), "'아니요' 버튼을 크릭하였습니다", Toast.LENGTH_SHORT).show(); } }); alertbox.show(); } }); // YES - NO Button End ////////////////////////////////////// // Progress Bar Start ////////////////////////////////////// Button proBtn = (Button) findViewById(R.id.btnProgress); proBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { ProgressDialog dialog = new ProgressDialog(MainActivity.this); dialog.setCancelable(true); dialog.setMessage("Loading..."); dialog.show(); } }); // Progress Bar End ////////////////////////////////////////// } }

아래 xml 문은 폴더 Res/layout/ 폴더내에 activit_main.xml 화일
(혹은 여러분들이 작성한 첫화면용 xml 화일에...)
에 붙여 넣고 실행하시면 그냥 잘 실행될 것이다

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:id="@+id/main_activity" >
    
       <Button android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center"
        android:text="Alert Box Sample" 
        android:layout_marginTop="15dp"
        android:id="@+id/btnAlert" />
    
    <Button android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Toast Sample" 
        android:layout_gravity="center"
        android:layout_marginTop="15dp"
        android:id="@+id/btnToast" />
        
 	<Button android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="15dp" 
        android:text="Yes/No InputBox Sample" 
        android:id="@+id/btnYesNo" />
 	
    <Button android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="15dp" 
        android:text="Progress Sample" 
        android:id="@+id/btnProgress" />
</LinearLayout>