패키지 이름: android.samples
액티비티 이름: MainActivity
시나리오
사용자는 애플리케이션을 시작한다.
시스템은 현재 날짜와 시간을 제공한다.
사용자는 현재 날짜와 시간을 요청한다.
시스템은 현재 날짜와 시간을 제공한다.
사용자 인터페이스 설계
전체 화면 크기의 버튼 - button
android:id="@+id/button"
android:layout_height="fill_parent" android:layout_width="fill_parent">
</Button>
사용자 인터페이스를 작성하기 위해서 다음 링크를 참조
http://android15.tistory.com/242
현재 날짜와 시간을 요청 - 버튼 클릭
현재 날짜와 시간을 제공 - 버튼
애플리케이션 설계
MainActivity
+ updateDateTime()
구현
1. 버튼
1.1 버튼 클릭
setOnClickListener
MainActivity는 android.view.View.OnClickListener 인터페이스 실현
1.2 버튼에 현재 날짜와 시간을 출력
setText
2. updateDateTime()
java.util.Date 사용
import android.view.View;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import java.util.Date;
public class MainActivity extends Activity implements View.OnClickListener{
Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(this);
updateDateTime();
}
@Override
public void onClick(View v) {
updateDateTime();
}
private void updateDateTime()
{
button.setText(new Date().toString());
}
}
안드로이드 User Interface에 대한 개요
http://android15.tistory.com/17
두 가지 방법이 있습니다. 선언적 방식과 프로그래밍 방식
선언적 방식은 UI를 구성하는 요소들과 그들에 대한 배치를 XML로 작성하는 것입니다.
우리는 프로그래밍 작성과 사용자 인터페이스 작성을 분리하기 원하기 때문에 XML로 작성하는 방식을 더 선호합니다.
레이아웃 선언하는 방법
http://android15.tistory.com/19
레아아웃은 액티비티의 사용자 인터페이스에 대한 구조에 해당합니다.
레이아웃은 레이아웃 구조를 정의하고 사용자에게 나타나는 모든 요소들을 가지고 있게 됩니다.
레이아웃을 작성하는 방법에는 두 가지가 있습니다.
한 가지 방식을 고집할 수도 있고, 두 가지 방식을 섞어서 사용할 수도 있습니다.
- XML로 UI요소들을 선언하는 방식
- 런타임시에 레이아웃 요소들을 인스턴스하는 프로그래밍 방식
일반적으로, 선언되는 UI요소에 대한 XML 용어는 UI요소의 클래스와 메소드 이름을 반영합니다.
EditText.setText()는 EditText요소의 text 속성에 해당합니다.
레이아웃 타입들에 대해서 더 많은 것을 알고 싶으면 아래 링크를 참조합니다.
Common Layout Objects
Hello Views
XML 작성해 보기
파일의 루트는 View 또는 ViewGroup 객체이어야 합니다.
일단 루트 요소가 정의되고 나면, 루트를 기준으로 레이아웃 객체나 위젯들을 자식 요소로 포함해서 작성할 수 있습니다.
아래 예는 수직방향으로 배치된 선형레이아웃 내에 텍스트 뷰와 버튼이 포함된 것입니다.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
</LinearLayout>
XML 자원을 로드
Activity의 onCreate 내에서 setContentView를 사용
자원은 자동생성되는 R클래스의 id로 관리되고, 사용됩니다.
레이아웃의 id는 R.layout.<레이아웃 파일이름>과 같이 작성됩니다. 예를 들어, 레이아웃 파일 이름이 main.xml이라면 R.layout.main이 됩니다.
아래 예의 레이아웃 파일 이름은 main_layout.xml입니다.
super.onCreate(savedInstanceState);
setContentView.(R.layout.main_layout);
}
onCreate는 콜백 메소드로 액티비티가 수행될 때 안드로이드 프레임워크에 의해서 호출됩니다. 액티비티의 생애주기가 궁금하다면 아래 링크를 참조합니다.
Application Fundamantals
XML 애트리뷰트들
모든 뷰와 뷰그룹 객체는 다양한 XML 애트리뷰트들을 갖는다.
id
뷰에 대한 식별자
런타임시에 뷰를 find하기 위해서 id를 사용합니다.
뷰에 대한 id는 다음과 같이 선언됩니다.
android:id="@+id/<뷰 객체 이름>"
@는 자원으로 사용됨을 의미합니다.
+는 새로운 자원 이름이 만들어져 자원으로 관리될 것이라는 것을 의미합니다.
안드로이드에서 제공되는 자원들에 접근할 때는 다음과 같이 작성합니다.
android:id="@android:id/<자원이름>"
수행시에 뷰를 사용할 경우는 다음과 같이 id를 사용해서 찾아 사용합니다.
Button myButton = (Button) findViewById(R.id.my_button);
상대배치(relative layout)에서는 뷰의 배치가 다른 뷰의 상대적인 위치로 정의되기 때문에 뷰 객체의 id를 정의하는 것은 중요해집니다.
id는 가능하면 전체 트리내에서 고유하면 좋지만, 트리의 특정 부분내에서 고유하면 됩니다. 즉 이름공간을 포함한 이름이 고유하면 됩니다.
레이아웃 파라미터들
뷰는 layout_somthing과 같은 이름을 갖는 XML 레이아웃 애트리뷰트들을 갖습니다. 이들은 뷰가 포함되는 뷰그룹 내에서의 배치를 위한 파라미터입니다.
모든 뷰그룹 클래스들은 ViewGroup.LayoutParams를 확장하는 내포 클래스들을 구현합니다. 이 하위 클래스는 자식 뷰에 대한 크기 및 위치를 정의하는 속성 타입들을 포함합니다. 아래의 그림과 같이 부모 뷰그룹은 자식 뷰들을 위한 레이아웃 파라미터를 정의합니다.
레이아웃과 관련된 속성들
어떤 방향으로 배치할 것인지,
상대적인 위치나 크기를 가질 경우,
위치와 크기를 정해야 합니다.
깔끔하게 배치하기 위해서는 padding와 margin에 대한 설정도 필요합니다.
margin은 경계와 외부사이의 간격이고, padding은 경계와 내부 본문과의 간격입니다.
http://developer.android.com/guide/topics/ui/index.html



