블로그 이미지
내게 능력 주시는 자 안에서 내가 모든것을 할수 있느니라 - 빌립보서 4 : 13 - happydong

카테고리

Happydong (1363)
프로그래밍 (156)
MUSIC (16)
인물 (3)
Utility (10)
세미나 소식&내용 (22)
IT뉴스 (18)
운동 (830)
CAFE (10)
Life (282)
Total
Today
Yesterday



 어떤 개발을 하던 사용자의 이벤트를 받아서 처리하는 것이 대부분 일 것이다. 처음 안드로이드를 공부하는 중인데간단하게 버튼 사용 법에 대해서 샘플 코드를 작성하면서 알아 보겠다.

 
프로젝트를 생성하면 아래 그림과 같이 생길 것 이다



[그림 1 - 샘플 프로젝트 구성 내용]



그럼 activity_main.xml 파일은 View를 처리하는 역할을 하고, MainActivity.javaController의 역활을 한다고 생각하면 된다. 그럼 activity_main.xml에서 간단하게 버튼 하나를 올려보자.



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/LinearLayout1"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context=".MainActivity" >

 

    <Button

        android:id="@+id/startBtn"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/hello_world" />

 

</LinearLayout>

[코그 1 - activity_main.xml 소스코드]


버튼(Button) 속성은 대충 보면 어떤걸 의미하지는 알 수 있을 것이다. 따로 설명은 하지 않겠다.
주요하게 id를 지정할 때 "@+id/"로 하는 것은 잘 기억해두자. 안드로이드 같은 경우 ‘@’기호로 ID를 찾기 때문에 “@+id/” ID를 추가 한다고 생각하면 될 것이다. 이렇게 정의 하게 되면 이 내용은 R.java파일에 기록이 된다. 그럼 .java파일에서 해당 Object를 찾을 수 있다.



           @Override

           protected void onCreate(Bundle savedInstanceState) {

                     super.onCreate(savedInstanceState);

                     setContentView(R.layout.activity_main);

                    

                     // View 있는 id 버튼 이벤트를 정의합니다.

                     Button startBtn = (Button)findViewById(R.id.startBtn);

                    

                     // OnClickListener를 이용해 버튼 이벤트 처리

                     startBtn.setOnClickListener(new OnClickListener() {

                               

                                @Override

                                public void onClick(View v) {

                                          // Toast 메세지창이 잠깐 나왔다 들어가는 것이다.

                                          // 이는 makeText()함수와 show()함수를 이용해 메세지를 보여줄수 있다.

                                          Toast.makeText(getApplicationContext(), "시작 버튼이 눌렀어요.", Toast.LENGTH_LONG).show();

 

                                }

                     });

                    

           }

[소스 2 – MainActivity.java 소스코드]


[소스 2]View에서 선언한 Button의 인스턴스를 생성한 후 해당 이벤트를 정의하는 코드이다. findViewById 함수를 이용해서 View에서 선언한 Button의 인스턴스를 만든다. 그리고 OnClickListener를 이용해서 버튼의 이벤트를 정의한다.  Toast를 이용해서 잠깐 나타났다 사라지는 메시지창을 이용해서 메시지를 간단하게 띄운다. 위 소스를 쓰다 보면
OnClickListener
Toast를 작성할 때 에러가 날 것이다. 이는 import가 안되서 그러는데 코드를 다 작성한 후 ctrl + Shift + o(영문)를 누루면 자동으로 필요한 내용이 import된다. 위 코드 까지 넣고 실행해 보면, 메시지가 잘 뜨는 것을 볼 수 있을 것이다.

여기서 중요한 것 findViewById함수를 이용해 객체 찾아 인스턴스 생성하기, OnClickListener를 이용해 버튼 이벤트 정의하기 정도가 되겠다.









Posted by happydong
, |



안드로이드 예제를 보면서 공부하고 있는데... 남들 다되는 소스가 내가 하면 안된다. 어떻게 안되느냐 하면, layout에서 @+id/{id}를 다들 지정해 주는데, java파일에 오면 R.id.{id}가 안나오는 것이다. 이상하다 싶어 알아보니, 리소스파일에 대문자로된 파일이 있으면 에러가 나는 것!! 그래서 R.java파일이 갱신이 안되는 것!!!

이걸로 30분 허비했음....;;;;


결론은 그냥 파일 넣을 때 소문자로 넣자!!


Posted by happydong
, |



예전에 "#if#end 또는 Conditional Attribute의 적절한 사용"라는 내용으로 블로 포스팅 한적이 있다. #if #endif의 사용법은 해당 포스팅을 참고하면 좋을 것이다. 이번에는 ASP.NET MVC 개발을 하면서 View에 디버깅 모드를 분리하는 방법에 대해  알아 보도록 하겠다.

@{

#if DEBUG

    // 해당 코드

#else

    // 해당 코드

#endif

}

[코드 1 - Index.cshtml 파일]


 위 [코드1]은 View에서 서버 코드를 작성 할때 처럼 "@{ }"를 이용해서 디버깅모드 설정을 한 것이다. 그러나 이건 마크업형태로 디버깅하기에는 매우 불편한 방법이다. 그래서 좀더 스마트 한 방법을 알아 보도록 하겠다. 이 방법을 사용하려면 기본적으로 "확장메서드(Extension Methods)"의 개념을 알고 있을 필요가 있다. 사용법 모른다면 일전에 제가 블로그 포스팅한 내용 "확장메서드(Extension Methods) 사용법" 참고 하길 바란다.

 

public static class ExtensionMethods

{

    public static bool IsDebug(this HtmlHelper htmlHelper)

    {

#if DEBUG

            return true;

#else

        return false;

#endif

    }

}

[코드 2 - cs파일에 HtmlHelper의 확장 메서드]

 위 [코드 2]처럼 HtmlHelper의 확장메서드를 만든다. 이는 간단하게 디거깅 모드인지 아닌지를 확인하는 메서드이다.



@if (Html.IsDebug())

{

    <div>Debug 모드</div>

}

else

{

    <div>Release 모드</div>

}

 

[코드 3 - Index.cshtml 파일]


 위 [코드 3]은 [코드 2]에서 만든 확장메서드를 사용하는 방법을 나타낸 것이다. 


 View에서 디버깅모드를 체크할때에는 [코드 1]을 이용하는 것 보다 확장 메서드를 이용하는 것이 좀더 스마트 한 방법이 아닐까 생각이 든다. 

Posted by happydong
, |