XML 코드

<?xml version="1.0" encoding="utf-8"?>

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

    android:id="@+id/tabHost"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent" >


    <TabWidget

        android:id="@android:id/tabs"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" />


    <FrameLayout

        android:id="@android:id/tabcontent"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent" >


        <LinearLayout

            android:id="@+id/tab1"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:orientation="vertical"

            android:paddingTop="60px" >


            <EditText

                android:id="@+id/editText1"

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:layout_marginTop="50dp"

                android:ems="10"

                android:inputType="textMultiLine" >


                <requestFocus />

            </EditText>


        </LinearLayout>


        <LinearLayout

            android:id="@+id/tab2"

            android:layout_width="fill_parent"

            android:layout_height="fill_parent"

            android:orientation="vertical"

            android:paddingTop="60px" >


            <EditText

                android:id="@+id/editText2"

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:layout_marginTop="50dp"

                android:ems="10"

                android:inputType="textMultiLine" >


                <requestFocus />

            </EditText>

        </LinearLayout>


        <LinearLayout

            android:id="@+id/tab3"

            android:layout_width="fill_parent"

            android:layout_height="fill_parent"

            android:orientation="vertical"

            android:paddingTop="60px" >


           <EditText

                android:id="@+id/editText3"

                android:layout_width="match_parent"

                android:layout_height="wrap_content"

                android:layout_marginTop="50dp"

                android:ems="10"

                android:inputType="textMultiLine" >


                <requestFocus />

            </EditText>

        </LinearLayout>


    </FrameLayout>


</TabHost>


메인액티비티 내용


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

TabHost tabHost=(TabHost)findViewById(R.id.tabHost);

tabHost.setup();


TabSpec spec1=tabHost.newTabSpec("Tab 1");

spec1.setContent(R.id.tab1);

spec1.setIndicator("Tab 1");


TabSpec spec2=tabHost.newTabSpec("Tab 2");

spec2.setIndicator("Tab 2");

spec2.setContent(R.id.tab2);


TabSpec spec3=tabHost.newTabSpec("Tab 3");

spec3.setIndicator("Tab 3");

spec3.setContent(R.id.tab3);


tabHost.addTab(spec1);

tabHost.addTab(spec2);

tabHost.addTab(spec3);

    

}

블로그 이미지

왕왕왕왕

,

리스너 안에는 오직 하나의 메소드만이 정의되어 있다. 다음 리스너들이 View클래스 안에 정의되어있다.

 

 리스너

콜백 메소드 

설명 

View.OnClickListener 

onClick() 

사용자가 어떤 항목을 터치하거나 내비게이션 키나 트래볼로 항목으로 이동한 후에 엔터키를 눌러서 선택하면 호출된다 

View.OnLongClickListener

onLongClick()

사용자가 항목을 터치하여서 일정 시간 동안 그대로 누르고 있었으면 발생한다. 

View.OnFocusChargeListener

onFocusChange() 

 사용자가 하나의 항목에서 다른 항목으로 포커스를 이동할 때 호출된다.

View.OnKeyListener

onKey()

포커스를 가지고 있는 항목 위에서 키를 눌렀다가 놓았을대 호출된다. 

View.OnTouchListener

onTouch() 

사용자가 터치 이벤트로 간주되는 동작을 할 경우에 호출된다. 

View.OnCreateContextMenuListener 

onCreateContextMenu() 

 컨텍스트 메뉴가 구축되어 있는 경우에 호출된다.

 

 

블로그 이미지

왕왕왕왕

,

안드로이드 Event 처리
- 안드로이드에서는 이벤트를 처리하는 다양한 방법이 존재한다.
- 안드로이드에서 다양한 이벤트 처리 방법


1) 콜백 메서드 재정의
2) 리스너 인터페이스 구현
3) 액티비티 리스너 구현
4) 뷰 리스너 구현
5) 무명 클래스 사용


▶ 이벤트리스너란
- 한 개의 콜백 메서드를 가지고 있는 View 클래스 안에 선언된 인터페이스
- 이벤트가 발생될 때 안드로이드 프레임웍에 의해 호출된다.


▶ 콜백(callback) 메서드란
일반적인 경우 사용자가 호출함으로써 시스템에 전달되어 호출된 메서드를 실행한다. 그러나 콜백메서드는 일반메서드와 달리 반대로 시스템이 해당 메서드를 호출한다. 콜백메서드는 이벤트 처리와 같은 경우에만 사용된다.


▶ findViewById(int id)
뷰는 자신을 식별하기 위해 ID 를 정의한다. 뷰를 생성하고 애플리케이션에서 뷰를 참조하려면 뷰를 위한 고유 ID 가 필요하다. ID 는 일반적으로 XML 파일에 속성으로 정의한다. XML 에서 뷰에 ID 를 지정한다면 findViewById 메서드를 이용하여 애플리케이션에서 참조할 수 있다.
형식: View findViewById(int id)
설명: Finds a view that was identified by the id attribute from the XML that was processed in onCreate(Bundle).

예: Button b1=(Button)findViewById(R.id.button1);


▶ 이벤트 처리
뷰는 사용자의 동작, 즉 이벤트에 의하여 상호작용이 발생하는 영역이다. 뷰에서 발생하는 이벤트를 처리하려면 이벤트를 처리하는 코드를 작성하고, 이를 뷰와 연결해야 한다.
View 클래스는 이벤트를 처리하는 인터페이스인 다음과 같은 리스너를 제공한다.
OnClickListener: void onClick(View v)
==> 그 외의 리스너는 홈페이지에서 찾아보자.
http://developer.android.com/reference/android/view/View.html


[실습 1] 버튼을 클릭하면 텍스트뷰의 텍스트 내용을 변경한다.
- 텍스트뷰와 버튼이 있는 화면을 만든다. 이 때 텍스트뷰와 버튼 모두 ID 가 정의되어 있도록 한다.
- src 폴더의 java 파일에 다음과 같이 코드를 추가한다.


1) 클래스에 View.OnClickListener 를 구현한다.
implements View.OnClickListener


2) 클래스 내에 오른쪽 버튼을 클릭하여 나타난 바로가기 메뉴에서 [Source]- [Override] 메뉴를 클릭한다.

 

 



3) 나타난 대화상자에서 “onClick" 메서드를 선택한 후 [OK] 버튼을 클릭한다. 그러면 클래스에 onClick 메서드가 삽입된다.

 

 

 


4) onCreate 메서드에 다음과 같이 코드를 작성한다. 즉 버튼을 리스너에 등록한다.
Button b1=(Button)findViewById(R.id.버튼의 ID);
b1.setOnClickListener(this);

5) onClick 메서드에는 다음과 같은 코드를 작성한다. 즉 버튼을 클릭하면 텍스트뷰의 텍스트가 변경되도록 한다.
TextView t1=(TextView)findViewById(R.id.텍스트뷰의 ID);
t1.setText("시작입니다");
※ 코드에서 리소스를 참조하려면 다음과 같이 R.java 파일에 정의된 R 클래스와 하위 클래스의 멤버변수를 통하여 접근한다.
R.리소스_형식.리소스_이름


[실습 2] 2 개의 버튼과 한 개의 텍스트뷰 추가. 각각의 버튼을 클릭하면 해당 텍스트 내용이 텍스트뷰에 나타나도록 한다.


- 이벤트 발생시키는 뷰의 id 를 파악하여 id 에 따라 텍스트 값 출력
- OnClickListener 의 onClick 메서드는 누구를 클릭했는지 View 타입의 인수 v 를 전달받는다. v 의 getId 메서드를 이용하여 클릭된 버튼을 알아내고 각 버튼별로 일을 처리하도록 한다.


[실습 3] 화면에 마우스를 클릭하거나, 움직임에 대한 텍스트 내용이 텍스트뷰에 표시되도록 한다.


- 모바일 환경에서 가장 흔하게 발생하는 이벤트는 손가락이나 스타일러스로 화면을 누르는 터치동작이다. 이 이벤트는 콜백 메서드나 리스너의 핸들러로 받는다


boolean onTouchEvent(MotionEvent event)
boolean onTouch(View v, MotionEvent event)


- MotionEvent.getAction 메서드는 사용자가 화면에 어떤 일을 했는지 정보를 전달한다.

ACTION_DOWN
화면을 눌렀다
ACTION_MOVE
누른 채로 움직였다
ACTION_UP
화면에서 손가락을 뗐다.

- 해결 방안
1) View.OnTouchListener 이용
2) 레이아웃의 id를 파악하여 레이아웃에 이벤트 리스너 등록
3) 동작에 따라 텍스트뷰에 상태 알림 텍스트 표시


[실습 4] 체크 버튼 추가. 체크 버튼 클릭에 따라 선택 여부의 텍스트 내용이 체크 박스 텍스트에 표시되도록 한다.

 

 


- OnCheckedChangeListener 이용
- 체크 버튼의 isChecked() 메서드 이용하여 체크 상태를 파악

 

'안드로이드' 카테고리의 다른 글

탭호스트 사용법  (0) 2015.05.15
이벤트처리:어떤 리스너들이 있는가?  (0) 2015.03.13
이벤트처리  (0) 2015.03.12
레이아웃:코드로 레이아웃 생성  (0) 2015.03.12
안드로이드 API 주소  (0) 2015.03.12
블로그 이미지

왕왕왕왕

,

이벤트처리

안드로이드 2015. 3. 12. 20:30

무한루프 돌면서 입력을 기다리는 폴링방식을 자원낭비가 심하다.

 

이벤트 구동 방식은 다른작업을하다가 입력이 발생하면 이벤트가 발생되고 애플리케이션이 이벤트를 처리한다.

 

 

이벤트처리하는 방법은 여러가지가 있다. 많이 사용되는 두가지방법을 살펴본다.

 

뷰클래스의 이벤트 처리 메소드를 재정의하는방법

뷰클래스의 이벤트 처리 메소드를 재정의한다. 특수한 경우에만 사용

 

이벤트를 처리하는 객체를 생성하여 이벤트를 처리하는 방법

이벤트를 처리하는 객체를 별도로 생성하여 위젯에 등록한다. 이벤트를 처리하는 가장 일반적인 방법

 

 

1. 이벤트 처리 메소드 재정의

 

사용자와 상호작용하는 객체는 View클래스이다 이벤트 발생했을 경우 호출되는 몇개의 콜백메소드를 가지고 있다.

 

View 객체에 액션이 발생하면 프레임워크에서 콜백 메소드를 호출한다.

 

예를 들어 키패드를 누르면 View클래스의 onKeyDown()메소드가 호출

키 이벤트를 처리하는 방법은 onKeyDown()메소드를 재정의하는것이다.

 

이방법을 사용하려면 View클래스를 상속받아서 자신의 뷰를 정의하여야한다. 이벤트처리하기위해서 상속받는 것은 실용적이지 않다. 그래서 많이 사용되지않는다.

 

반드시 이 방법이 필요한 경우는 사용자가 커스텀 컴포넌트를 만들고 싶은 경우이다.

 

우리가 재정의 할 수 있는 View클래스의 이벤트 처리 메소드는 다음과 같다.

 

onKeydown(int,KeyEvent) - 사용자가 키보드를 눌렀을 때 호출

onKeyUp(int,KeyEvent) - 사용자가 키보드에서 손을 뗐을대 호출

 

onTrackballEvent(MotionEvent) - 사용자가 트랙볼을 움직였을 때 호출

ontouchEvent(MotionEvent) - 사용자가 화면을 터치했을 때 호출

onFocusChanged(boolean, int, Rect) - 뷰가 포커스를 얻거나 잃었을 때 호출

 

 

 

블로그 이미지

왕왕왕왕

,

선형 레이아웃은 자식뷰안에 LinearLayout.LayoutParams 객체를 가지고있고 배치관련 정보들을 저장한다.

 

상대적레이아웃객체는 자식뷰들 안에 RelativeLayout.LayoutParams 객체안에 배치관련 정보들을 저장한다.

 

 

예를들면 ViewGroup.LayoutParams는 필드로 layout_width, layout_height를 가지고, ViewGroup.LayoutParams에서 파생된 LinearLayout.LayoutParams는 추가로 layout_gravity, layout_weight를 가진다.

RelativeLayout.LayoutParams는 추가로 layout_above,layout_alignBaseline...등 많은 속성을 가진다.

 

코드만으로 인터페이스를 작성할 경우 각각의 뷰를 뷰그룹에 추가할때마다 적절한 LayoutParams 객체를 생성하여 인수로 전달한다.

 

 

LinearLayout manager = new LinearLayout(this);

manager.setOrientation(LinearLayout.VERTICAL);

 

Button btn1 = new Button(this);

btn1.setText("테스트버튼1");

Button btn2 = new Button(this);

btn2.setText("테스트버튼2");

 

LinearLayout.Params param = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,

LinearLayout.LayoutParams.WRAP_CONTENT);

 

manager.addView = (btn1,param);

manager.addView = (btn2,param);

 

setContentView(manager);

 

 

블로그 이미지

왕왕왕왕

,

http://developer.android.com/reference/packages.html

 

영어다. 개발하려면 영어라도 해석하면서 봐야 할 것 이다.

'안드로이드' 카테고리의 다른 글

이벤트처리  (0) 2015.03.12
레이아웃:코드로 레이아웃 생성  (0) 2015.03.12
레이아웃:AbsoluteLayout  (0) 2015.03.12
레이아웃:RelativeLayout  (0) 2015.03.12
레이아웃:FrameLayout,TableLayout  (0) 2015.03.12
블로그 이미지

왕왕왕왕

,

AbsoluteLayout

 

절대적인 좌표값을 주어서 뷰들을 배치하는 방법 layout_x, layout_y에 원하는 좌표값을 지정하면된다.

 

단위는 px 이다

 

 

<AbsoluteLayout>

<Button

android:layout_x="100px"

android:layout_y="100px"

/>

</AbsoluteLayout>

 

(100,100)에 버튼 배치

블로그 이미지

왕왕왕왕

,

RelativeLayout(상대적 레이아웃)

 

자식 부의 위치를 부모 뷰나 다른 자식뷰들에 상대적으로 지정하는 방법

 

 

 속성

설명 

layout_above 

만약 true이면 현재 뷰의 하단을 기준 뷰의 위에 일치시킨다. 

layout_below

현재 뷰의 상단을 기준 뷰의 하단에 위치시킨다. 

layout_centerHorizontal 

수평으로 현재뷰의 중심을 부모와 일치시킨다. 

layout_centerInParent

부모의 중심점에 현재뷰를 위치시킨다. 

layout_centerVertical 

수직으로 현재 뷰의 중심을 부모와 일치시킨다. 

layout_toLeftOf

현재 뷰의 우측단을 기준 뷰의 좌측단에 위치시킨다. 

layout_toRightOf 

현재 뷰의 좌측단을 기준뷰의 우측단에 위치시킨다. 

 

layout_below="@+id/btn" btn이라는 버튼의 상단부분을 기준 뷰의 하단에 위치

 

 

 

 

'안드로이드' 카테고리의 다른 글

안드로이드 API 주소  (0) 2015.03.12
레이아웃:AbsoluteLayout  (0) 2015.03.12
레이아웃:FrameLayout,TableLayout  (0) 2015.03.12
레이아웃:LinearLayout (속성, 가중치)  (0) 2015.03.12
레이아웃: 레이아웃의 종류들  (0) 2015.03.12
블로그 이미지

왕왕왕왕

,