728x90

안드로이드 응용 프로그램의 화면을 구성하는 주요 단위는 액티비티이다. 그러나 액티비티 자체는 화면에 직접적으로 보이지 않으며 액티비티 안의 뷰가 사용자를 대면하는 실체이다. 뷰 여러 개가 모여서 액티비티를 구성하고 액티비티 여러 개가 모여서 응용 프로그램이 된다. 뷰는 안드로이드의 사용자 인터페이(UI)를 구성하는 핵심 컴포넌트로써 화면상의 사각 영역을 차지하며 자신의 모양을 그리고 사용자로부터 입력을 받아들인다.

 

뷰는 크게 두 가지로 분류된다.

 

1.위젯 : 직접적으로 보이며 사용자 인터페이스를 구성한다. 버튼, 텍스트 뷰, 에디트, 라디오 버튼 등이 위젯이며 흔히 컨트롤이라고도 부른다. 사용자에게 정보를 보여주고 명령을 입력받는 역할을 한다.

 

 

 

초록색으로 표시되어 있는 클래스들은 빈번히 사용되는 것들이다.

 

 

2.뷰 그룹 : 직접적으로 보이지 않으며 다른 뷰를 담는 컨테이너 역할을 한다. 이름 그대로 여러 개의 뷰를 유기적으로 모아 놓은 것이다. 이 부류의 클래스들을 레이아웃 이라고 한다.

 

 

 

초록색으로 표시되어 있는 클래스들은 빈번히 사용되는 것들이다.

 

728x90

'Android' 카테고리의 다른 글

안드로이드 TextView  (0) 2012.07.27
안드로이드 뷰(View)의 속성  (0) 2012.07.27
안드로이드 에뮬레이터 사용법  (0) 2012.07.27
안드로이드 XML 레이아웃의 장점  (0) 2012.07.27
안드로이드의 레이아웃 파일  (0) 2012.07.27
Posted by 정망스
,
728x90

 이클립스에서 예제를 실행하거나 AVD 관리자에서 [Start] 버튼을 누르면 에뮬레이터가 뜬다.

 

 

각 버튼의 기능

 

 

 

728x90
Posted by 정망스
,
728x90

마법사가 만들어준 프로젝트는 XML 레이아웃을 쓰도록 되어 있지만 반드시 XML을 사용해야 하는 것은 아니다.

자바 소스에서 순수한 코드만으로도 레이아웃을 구성할 수 있다.

 

package exam.androidfirst;

 

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;

 

public class AndroidFirst extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    TextView MyText = new TextView(this);

    MyText.setText("코드로 문자열 출력하기");

    setContentView(MyText);

    }

}


TextView는 화면에 문자열을 출력하는 가장 기본적인 위젯이다. 이 위젯을 사용하려면 소스 선두에 TextView 클래스를 사용하겠다는 import 선언을 해야한다. onCreate에서 MyText 변수를 선언하고 new 연산자로 TextView 객체를 생성했다. 빈 문자열을 가진 상태로 초기화 되므로 setText 메서드를 호출하여 원하는 문자열을 대입해야 한다. setContentView 메서드로 전달하여 액티비티의 내용물을 TextView 객체로 채우면 TextView의 내용물인 문자열이 액티비티에 나타난다.

 

 

 

그러나 코드에서 모든 것을 처리하는 방식은 규모가 아주 작은 프로젝트에서나 편리하고 규모가 큰 프로젝트에서 이러한 방법은 코드 관리의 한계점을 지닌다.

 

따라서 XML 레이아웃을 사용한다.

장점은.

코드와 데이터가 완벽하게 분리되므로 개발자와 디자이너의 분담 작업이 용이하다.

조건에 따라 레이아웃을 통째로 교체할 수 있으므로 호환성 확보, 국제화에 유리하다.

레이아웃만 수정할 때는 코드를 컴파일하지 않아도 되므로 개발 속도가 빨라진다.

구조와 속성을 함축적으로 기술할 수 있으며 레이아웃 재활용도 가능하다.

 

XML 레이아웃은 용량이 큰 텍스트 파일이고 구조도 복잡해서 정확한 의미를 분석하는데 다소 시간이 걸린다. 그러나 XML레이아웃을 분석하는 작업은 컴파일시에 미리 수행되므로 성능상의 불이익은 전혀 없으며 분석된 결과는 이진 포맷으로 바뀌어 실행 파일에 포함되므로 용량상의 낭비도 없다.

 

실제 프로젝트에서는 코드 레이아웃과 XML 레이아웃을 둘 다 사용하여 때로는 두 방법을 동시에 적용하기도 한다. 디자인 타임에 결정되는 정적인 레이아웃주로 XML을 사용하고 실행 중에 결정해야 하는 동적인 레이아웃은 코드를 사용하는 것이 보편적이다.


 

 

728x90
Posted by 정망스
,
728x90

 setContentView의 인수로 전달된 R.layout.main은 구체적으로 main.xml 레이아웃 파일을 의미

 마법사가 프로젝트를 생성할 때 기본 레이아웃 파일을 만들어주는데 패키지 탐색기에서 res/layout 폴더 안의

 main.xml 파일을 열어보면 아래와 같은 GUI 디자인 뷰가 열린다.

 

 

이 화면에서 마우스로 레이아웃을 편집하고 확인 할 수 있다.

아래쪽의 main.xml을 클릭하면 텍스트 형태로 xml 파일을 보고 편집 할 수 있다.

 

 

xml 파일이다, xml 헤더가 있고 utf-8로 인코딩 되어 있다.

루트 엘리먼트에는 android 네임 스페이스(android:)가 정의 되어 있는데 네임 스페이스란 어휘의 중복을 방지하기 위한 xml 표준 장치이다. 모든 속성명 앞에 이 네임스페이스가 붙는다.

 

이 파일의 구조는 현재 리니어 레이아웃에 텍스트 뷰를 하나 배치하고 택스트 뷰에 @string/hello 를 출력하라는 뜻이다.

리니어 레이아웃은 가장 흔하게 사용되는 레이아웃이며 차일드를 수평, 수직으로 나란히 배열하는 컨테이너이다.

여기서 @은 리소스에서 ID를 참조하라는 뜻이다. @srting/hello는 values 폴더의 strings.xml 파일에 정의되어 있다.

 

 

GUI 편집 화면이 열리는데 직관적이고 사용하기 쉽다.

아래쪽의 strings.xml 탭을 누르면 텍스트 형태로 전환된다.

 

 

 

두 개의 문자열이 정의되어 있다.

hello 문자열은 뷰 안에 출력되고 app_name 문자열은 타이틀 바에 표시된다.

이 문자열을 수정한 후 재실행(ctrl+s, ctrl+F11)하면 바뀐 문자열이 화면에 나타난다.

코드나 xml 파일에서 참조하는 리소스 ID는 R.java 파일에 정의된다.

이 파일에는 상수를 정의하는 클래스만 잔뜩 선언되어 있으며 코드는 전혀 없다.

 

이 파일은 개발툴이 자동으로 관리하므로 개발자가 임의로 편집해서는 안 되며 그럴 필요도 없다.

R클래스 안에 종류별로 drawable, layout, string 등의 정적 클래스를 정의하고 그 안에 main, hello등의 상수가

정의되어 있다. 그래서 소스에서는 복잡한 16진수를 쓸 필요없이 R.layout.main이라고만 쓰면 된다.

 

R.java 파일에 정의된 16진수의 실제값인 0x7f030000 등은 리소스 간의 구분을 위해 붙이는 일련 번호이며 개발툴이 알아서 관리한다. 내부적인 규칙에 의해 값이 중복되지 않도록 관리할 것이다. 값 자체는 큰 의미가 없기 때문에 몰라도 상관없으며 코드에서 Icon, main, hello 같은 명칭만 잘 사용하면 된다.

 

 

 

728x90
Posted by 정망스
,
728x90

package exam.androidfirst;

import android.app.Activity;

import android.os.Bundle;

 

public class AndroidFirst extends Activity {  

 

//메인클래스인 AndroidFirst는 Activity 클래스를 상속받는다.

//액티비티는 화면 하나를 표현하므로 이 클래스를 상속받으면 화면 하나가 만들어진다.

        

 /** Called when the activity is first created. */     

@override

public void onCreate(Bundle savedInstanceState) {  //액티비티가 생성될때 호출되는 onCreate 메서드의 재정의

super.onCreate(savedInstanceState);    // 슈퍼클래스인 액티비티의 onCreate를 호출하여 부모부터 초기화

setContentView(R.layout.main); //초기화를 수행후 setContentView 메서드를 호출하여 액티비티에 내용물을 채운다

}

 

}

 

setContentView 메서드는 채우는 내용물에 따라 다음 세 가지 원형으로 정의되어 있다.

 

void Activity.setContentView (int layoutResID)

void Activity.setContentView (View view [, viewGroup.LayoutParams params])

 

원형에서 [] 괄호로 싸여진 인수는 생략 가능

메서드 이름앞에 Activity.은 메서드가 소속된 클래스를 표시한다.

 

안드로이드는 setContentView 메서드로 전달되는 인수의 타입에 따라 레이아웃을 정의하는 두 가지 방법을 제공한다.

 

XML 파일에 레이아웃을 기술하고 레이아웃 파일의 리소스 ID를 setContentView 메서드로 전달한다.

    디자인 타임에 미리 레이아웃을 정의할 수 있어 복잡한 모양을 만들 수 있으며 관리하기도 편리

 

뷰 객체를 동적으로 생성한 후 setContentView 메서드로 전달한다. 실행 중에 동적으로 레이아웃을

    구성할 수 있는 이점이 있지만 관리하기는 어렵다.

 

 

728x90
Posted by 정망스
,


맨 위로
홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침