뷰(View)란 안드로이드 화면에서 우리에게 보여지는 것이라고 할 수 있다.

뷰는 크게 위젯과 뷰그룹으로 나눌 수 있으며,

위젯이란 버튼, 텍스트뷰, 에디트, 라디오버튼 등을..

뷰그룹이란 뷰들을 모아 담는 것.. 즉 레이아웃이라고 볼 수 있다.

위젯이나 뷰그룹 모두 View 클래스를 상속한 것이므로 가장 먼저 View 클래스의 속성에 대해 알아보려한다.

 

 

android.view 패키지의 View 클래스이며, Object를 상속하는 최상위 클래스임을 알 수 있다.

API를 보면 View의 XML Attributes 가 상당히 많은데 이 중 중요하다고 생각하는 몇가지를 알아보겠다.

1. id

- 해당 뷰를 구별하는 고유한 이름을 정의할 때 사용한다.

android:id="@+id/text01"

위와 같이 사용하며 "@" 기호는 리소스를 참조한다는 뜻으로 무조건 붙인다고 생각하고,

"+" 기호는 새로 정의(추가) 한다는 의미이며, "id"는 예약어이다.

"/" 기호 다음에 내가 정하는 고유한 이름(ID)를 등록하면 된다.

이렇게 정한 ID는 XML문서나 JAVA문서에서 참조할 수 있으며, 굳이 참조할 필요가 없는 것에는 ID를 부여할 필요는 없다.

2. background

- 배경을 그리는데 사용하는 속성이다.

가장 흔한 형태로는 색상을 지정하여 사용하는데.. 그 형태는 다음과 같다.

android:background="#FF112233"

"#FF112233" 이렇게 #기호 다음에 16진수 8자리로 지정하여 사용한다.

첫 두자리 'FF'는 ALPHA(투명도) 값이며, '00'(투명) ~ 'FF'(불투명) 사이의 값을 지정하여 사용할 수 있다.

다음 두자리 '11'은 RED값, 다음 두자리 '22'는 'GREEN'값, 다음 두자리 '33'은 'BLUE'값이다.

background 속성은 단색 외에 이미지등을 지정하여 사용할 수도 있다.

3. padding

- 뷰와 내용물 간의 간격을 지정하는 속성이다.

버튼을 예를 들면 버튼자체와 그 안의 텍스트 사이의 간격을 padding이라고 한다.

padding을 지정하는 방법에는 아래와 같이 5가지가 있다.

android:padding = "10dp" ---------- 전 위,아래,좌,우 모든 방향에 padding값을 적용.

android:paddingTop = "10dp" ---------- 위 방향에 padding 값 적용.

android:paddingBottom = "10dp" -------- 아래 방향에 padding 값 적용.

android:paddingLeft = "10dp" ----------- 좌 방향에 padding 값 적용.

android:paddingRight = "10dp" --------- 우 방향에 padding 값 적용.

4. layout_width, layout_height

- 이 속성은 ViewGroup 에 속하는 속성이지만 두루두루 쓰이므로 여기에서 말하는 것이 나을것이라 생각한다.

 


 

XML Attributes 에서 보는 것과 같이 사용하며, 그 상수(Constants) 값으로는 FILL_PARENT, MATCH_PARENT, WRAP_CONTENT 가 사용된다.

FILL_PARENT 와 MATCH_PARENT 는 '-1'이라는 같은 값을 취하는 데 기존에 FILL_PARENT 로 사용하다가 안드로이드 API 8(프로요) 버전 이후로

이름을 변경해서 사용한다. 물론 둘다 사용 가능하다.

FILL_PARENT/MATCH_PARENT 는 부모의 주어진 크기를 다 채운다는 의미이고,

WRAP_CONTENT 는 내용물의 크기만큼만 채운다는 의미이다.

이것말고 직접 값을 지정하여 사용할 수 있는데 이 때 단위는 밀도에 독립적인 'dp'를 사용하는 것이 좋다.

위의 내용을 정리한 사용방법은 아래와 같다.

android:layout_width="FILL_PARENT"

android:layout_height="WRAP_CONTENT"

android:layout_width="15dp"

5. visibility

- 뷰의 가시성에 대한 속성이다.

 

visible - 보이는 상태.

invisible - 보이지 않는 상태이지만 자리는 차지한다.

gone - 보이지 않는 상태이며, 자리도 차지하지 않는다.

아래와 같이 사용한다.

android:visibility="invisible"

6. clickable, longClickable

- 클릭 이벤트, 롱 클릭 이벤트를 받을 것인지 지정한다.

boolean(true/false) 로 설정한다.

android:clickable="true"

android:longClickable="false"

'Android' 카테고리의 다른 글

[Android]형변환 종류  (0) 2012.05.29
[Android]Log 필터  (0) 2012.05.29
[Android]CP(Content Provider)  (0) 2012.05.24
[Android]SQLite 접근하기  (0) 2012.05.23
[Android]SQLite Manager 설치  (0) 2012.05.23

CP(Content Provider)

원래는 아래와 같이 다른 어플리케이션이 현재 어플리케이션의 데이터를 접근을 못합니다.

 

응용프로그램이 만든 데이터를 외부로 공개하려면 CP를 제공해야합니다.

응용프로그램끼리 공유하기 위한 것입니다.

 

이때 URI라는 것을 쓰게되는데 정보의 위치를 나타냅니다. 형식은

content://authority/path/id 입니다.

authority는 정보제공자의 명칭 주로 패키지명을 씀

path는 정보의종류를 지정하는 가상의 경로

id는 구체적으로 어떤 정보인지 전체 정보 가져올려면 안써도됨

content://contacts/people/5 는 주소록 5번 항목에 대한 URI를 의미

MIME타입

String getType(Uri uri) MIME타입을 조사하는데

주로 vnd.회사명.cursor.dir/타입(데이터의 집합인경우)

vnd.회사명.cursor.item/타입(개별데이터의 경우)로 합니다.

예전 소스중에 테이블을 han eng속성을 테이블로 만든 소스와 xml과 자바파일은 같습니다.

main.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:id="@+id/insert"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="mOnClick"

android:text="Insert"

/>

<Button

android:id="@+id/delete"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="mOnClick"

android:text="Delete"

/>

<Button

android:id="@+id/update"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="mOnClick"

android:text="Update"

/>

<Button

android:id="@+id/select"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="mOnClick"

android:text="Select"

/>

<EditText

android:id="@+id/edittext"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

</LinearLayout>

 

 

 

package com.android.ex113;

import android.app.*;

import android.content.*;

import android.database.*;

import android.database.sqlite.*;

import android.os.*;

import android.view.*;

import android.widget.*;

public class ex113 extends Activity {

WordDBHelper mHelper;

EditText mText;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mHelper = new WordDBHelper(this);

mText = (EditText)findViewById(R.id.edittext);

}

 

public void mOnClick(View v) {

SQLiteDatabase db;

ContentValues row;

switch (v.getId()) {

case R.id.insert:

db = mHelper.getWritableDatabase();//디비 오픈

//데이터 삽입 첫번째 방법

// insert 메서드로 삽입

row = new ContentValues();//레코드는 ContentValus클래스로 관리함

row.put("eng", "boy");//첫번째는 속성 두번째는

row.put("han", "머스마");

db.insert("dic", null, row);//row dic테이블에 저장

//두번째 방법

// SQL 명령으로 삽입

db.execSQL("INSERT INTO dic VALUES (null, 'girl', '가시나');");

mHelper.close();//디비 닫음

mText.setText("Insert Success");

break;

case R.id.delete:

db = mHelper.getWritableDatabase();

//삭제방법 첫번째

// delete 메서드로 삭제 아래는 테이블을 삭제함

db.delete("dic", null, null);

//두번째 SQL 명령으로 삭제 테이블을 삭제함

//db.execSQL("DELETE FROM dic;");

mHelper.close();

mText.setText("Delete Success");

break;

case R.id.update:

db = mHelper.getWritableDatabase();

// update 메서드로 갱신

row = new ContentValues();

row.put("han", "소년");

db.update("dic", row, "eng = 'boy'", null);

// SQL 명령으로 갱신 eng boy 것을 han 소년으로 바꾼다 이런뜻

//db.execSQL("UPDATE dic SET han = '소년' WHERE eng = 'boy';");

mHelper.close();

mText.setText("Update Success");

break;

case R.id.select:

//셀렉트는 일종의 찾기 개념

db = mHelper.getReadableDatabase();

Cursor cursor;//커서를 선언함 결과셋을 가리키는 포인터

// 첫번째 query 메서드로 읽기 인자는 많아서 api보는게 빠를듯

//cursor = db.query("dic", new String[] {"eng", "han"}, null,

// null, null, null, null);

// 두번째 SQL 명령으로 읽기

cursor = db.rawQuery("SELECT eng, han FROM dic", null);

String Result = "";

while (cursor.moveToNext()) {//다음것이 있으면 true

String eng = cursor.getString(0);//ColumnIndex = 0

String han = cursor.getString(1);

Result += (eng + " = " + han + "\n");

}

if (Result.length() == 0) {

mText.setText("Empyt Set");

} else {

mText.setText(Result);

}

cursor.close();//커서닫고

mHelper.close();//디비 닫고

break;

}

}

}

class WordDBHelper extends SQLiteOpenHelper {

public WordDBHelper(Context context) {

super(context, "EngWord.db", null, 1);//두번째명은 db파일명임 네번째는 버젼

}

public void onCreate(SQLiteDatabase db) {

//쿼리구문 실행 dic라는 테이블을 만듬 속성은 _id eng han 3개가 있음

//주키는 _id 인스턴스가 추가될때마다 +1 증가함

db.execSQL("CREATE TABLE dic ( _id INTEGER PRIMARY KEY AUTOINCREMENT, " +

"eng TEXT, han TEXT);");

}

//버젼이 바뀌었을때 처리

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL("DROP TABLE IF EXISTS dic");//기존 테이블을 삭제하고

onCreate(db);//다시 만든다

}

}

 

 

다음은 컨텐트프로바이더를 구현한 부분입니다.

package com.android.ex113;

import android.content.*;

import android.database.*;

import android.database.sqlite.*;

import android.net.*;

import android.text.*;

public class CP extends ContentProvider {

static final Uri CONTENT_URI = Uri.parse("content://com.android.ex113/word");

//authority path 지정

static final int ALLWORD = 1;

static final int ONEWORD = 2;

static final UriMatcher Matcher;

//초기화섹션 이부분이 맨처음 시작됨

static {

//UriMatcher 라는 유틸리티클래스로 uri문자열을 미리 분석하여 authority, path 쌍을 정수 코드와 매치

//match 메소드가 전달 받은 uri 분석해 등록된 정수코드를 리턴한다.

Matcher = new UriMatcher(UriMatcher.NO_MATCH);

Matcher.addURI("com.andorid.ex113", "word", ALLWORD);

Matcher.addURI("com.andorid.ex113", "word/*", ONEWORD);

}

SQLiteDatabase mDB;

//데이터베이스를 여는 부분

public boolean onCreate() {

WordDBHelper helper = new WordDBHelper(getContext());

mDB = helper.getWritableDatabase();//데이터베이스를 불러옴

return true;

}

//MIME타입을 조사함

public String getType(Uri uri) {

if (Matcher.match(uri) == ALLWORD) {

return "vnd.com.android.ex113.dir/word";//정보가 복수

}

if (Matcher.match(uri) == ONEWORD) {

return "vnd.com.android.ex113.item/word";//정보가 단수

}

return null;

}

//첫번째인자 쿼리의 Uri 두번째인자 DB 속성 배열

//세번째인자 DB에서 ROW 필터링할 SQL에서 WHERE 의미

//네번재인자 selection에서 "?" 포함할 경우 selectionArgs값으로 대체

//다섯번재이나 DB ROW 정렬방법

// 메소드에서는 실제 데이터를 제공한다

public Cursor query(Uri uri, String[] projection, String selection,

String[] selectionArgs, String sortOrder) {

String sql;

// 전체에 대한 쿼리 명령

sql = "SELECT eng, han FROM dic";//dic테이블에서 eng han속성을 가져온다.

// 단어 선택 where 추가

if (Matcher.match(uri) == ONEWORD){//get(1) id 가져오라는 의미ㅡ

sql += " where eng = '" + uri.getPathSegments().get(1) + "'";

}

Cursor cursor = mDB.rawQuery(sql, null);//커서는 rawQuery 쓴다

return cursor;

}

//DB 새로운 행을 넣도록

public Uri insert(Uri uri, ContentValues values) {

long row = mDB.insert("dic", null, values);

if (row > 0) {//삽입 성공시

Uri notiuri = ContentUris.withAppendedId(CONTENT_URI, row);

//삽입 성공시 아래 메소드를 실행해서 변경사실을 알린다 리스트뷰를 업데이트하라는 의미와 같음

//컨텐트 리졸버를

getContext().getContentResolver().notifyChange(notiuri, null);

return notiuri;//추가된 아이디 URI반환

}

return null;

}

//데이터베이스에서 하나의 행을 삭제할때 호출됨

//두번째인자 삭제할 행의 필터값 쿼리문의 WHERE 의미

public int delete(Uri uri, String selection, String[] selectionArgs) {

int count = 0;

//*

switch (Matcher.match(uri)) {

case ALLWORD://예로는 apple 삭제해라

count = mDB.delete("dic", selection, selectionArgs);

break;

case ONEWORD://예로는 a로시작하는 글자들을 삭제하라

String where;

where = "eng = '" + uri.getPathSegments().get(1) + "'";//id반환해서

if (TextUtils.isEmpty(selection) == false) {//selection 비어있지않다면

where += " AND" + selection;

}

count = mDB.delete("dic", where, selectionArgs);//쿼리구문을 보내서 삭제함

break;

}

//변경사실을 알림

getContext().getContentResolver().notifyChange(uri, null);

return count;//리턴값은 갱신된 행의 갯수

//*/

/*

String sql;

// 전체에 대한 쿼리 명령

sql = "DELETE FROM dic";

// 단어 선택 where 추가

if (Matcher.match(uri) == ONEWORD) {

sql += " where eng = '" + uri.getPathSegments().get(1) + "'";

}

mDB.execSQL(sql);

return 1;

//*/

}

//update 데이터베이스 갱신을 할때씀

//values 갱신될 selection where 의미 selectionArgs "?" 쓸때

public int update(Uri uri, ContentValues values, String selection,

String[] selectionArgs) {

int count = 0;

switch (Matcher.match(uri)) {

case ALLWORD://예로는 apple application으로 업데이트

count = mDB.update("dic", values, selection, selectionArgs);

break;

case ONEWORD://예로는 a로시작하는 글자들을 업데이트

String where;

where = "eng = '" + uri.getPathSegments().get(1) + "'";

if (TextUtils.isEmpty(selection) == false) {

where += " AND " + selection;

}

count = mDB.update("dic", values, where, selectionArgs);

break;

}

//컨텐트리졸버한테 바뀐 사실을 알림

getContext().getContentResolver().notifyChange(uri, null);

return count;//갱신된 행의 갯수

}

}

 

 

마지막으로 AndroidManifast파일에서 빨간부분을 써야합니다.

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

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

package="com.android.ex113"

android:versionCode="1"

android:versionName="1.0">

 

<uses-sdk android:minSdkVersion="7" />

<application android:icon="@drawable/icon" android:label="@string/app_name">

 

<activity android:name=".ex113" android:label="@string/app_name">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<provider android:name=".CP"

android:authorities="com.android.ex113"/>

</application>

</manifest>

 

 

여기서 주의할점은 CP는 컨텐트프로바이더 클래스를 의미합니다. 점은 같은 패키지라는 뜻입니다.

다음으로는 다른 어플리케이션에서 위에서 만든 데이터베이스를 접근해봅시다.

새로운 프로젝트를 만들고 합니다.

main.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:id="@+id/readall"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="mOnClick"

android:text="Readl All"

/>

<Button

android:id="@+id/readone"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="mOnClick"

android:text="Read One"

/>

<Button

android:id="@+id/insert"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="mOnClick"

android:text="Insert"

/>

<Button

android:id="@+id/delete"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="mOnClick"

android:text="Delete"

/>

<Button

android:id="@+id/update"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="mOnClick"

android:text="Update"

/>

<EditText

android:id="@+id/edittext"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

</LinearLayout>

 

 

자바파일

package com.android.ex115;

import android.app.*;

import android.content.*;

import android.database.*;

import android.net.*;

import android.os.*;

import android.view.*;

import android.widget.*;

public class ex115 extends Activity {

//다음의 URI ex113예제와 같아야합니다.

static final String WORDURI = "content://com.android.ex113/word";

EditText mText;

 

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mText = (EditText)findViewById(R.id.edittext);

}

public void mOnClick(View v) {

//다른 어플리케이션에서는 컨텐트리졸버가 필요합니다/

ContentResolver cr = getContentResolver();

switch (v.getId()) {

// 전부 읽기

case R.id.readall:

//커서로 가져오는 부분

Cursor cursor = cr.query(Uri.parse(WORDURI), null, null, null, null);

String Result = "";

while (cursor.moveToNext()) {//모든 정보출력

String eng = cursor.getString(0);//0번째는 eng속성

String han = cursor.getString(1);//1번째는 han속성

Result += (eng + " = " + han + "\n");

}

if (Result.length() == 0) {

mText.setText("Empyt Set");

} else {

mText.setText(Result);

}

cursor.close();

break;

// 하나만 읽기

case R.id.readone:

//이번에는 id boy 것만 가져오기

Cursor cursor2 = cr.query(Uri.parse(WORDURI + "/boy"),

null, null, null, null);

String Result2 = "";

if (cursor2.moveToFirst()) {

String eng = cursor2.getString(0);

String han = cursor2.getString(1);

Result2 += (eng + " = " + han + "\n");

}

if (Result2.length() == 0) {

mText.setText("Empyt Set");

} else {

mText.setText(Result2);

}

cursor2.close();

break;

// 삽입

case R.id.insert:

ContentValues row = new ContentValues();

row.put("eng", "school");

row.put("han", "학교");

//CP클래스의 insert에서 어떻게 처리하는지 보세요

cr.insert(Uri.parse(WORDURI), row);

mText.setText("Insert Success");

break;

// 삭제

case R.id.delete:

//CP클래스의 delete에서 어떻게 처리하는지 보세요

cr.delete(Uri.parse(WORDURI), null, null);

mText.setText("Delete Success");

break;

// 수정

case R.id.update:

ContentValues row2 = new ContentValues();

row2.put("han", "핵교");

//CP클래스의 update에서 어떻게 처리하는지 보세요

cr.update(Uri.parse(WORDURI + "/school"), row2, null, null);

mText.setText("Update Success");

break;

}

}

}

 

 

 

'Android' 카테고리의 다른 글

[Android]Log 필터  (0) 2012.05.29
[Android]Layout 뷰의 기능들...  (0) 2012.05.25
[Android]SQLite 접근하기  (0) 2012.05.23
[Android]SQLite Manager 설치  (0) 2012.05.23
[Android]TextView 에서 스크롤 기능 추가  (0) 2012.05.22
# 데이터 저장위치 접근하기
DDMS -> File Explore -> data/data/패키지명/databases/myMember.db

 

## 데이터 확인 방법 ##

1. Pull a file from the Devices버튼을 눌러 파일을 컴퓨터에 저장한다(우측 상단에 검은색 휴대폰 아이콘)

2. Firefox 브라우저를 열고 개발 도구 -> SQLite Manager 실행 (설치과정도 있으니 참고 )

3. 실행해보면 DB내용을 확인, 수정 가능하다.

파이어폭스에는 안드로이드에서 사용하는 SQLite의 개발도구를 부가기능으로

 

지원합니다. 설치파일과 방법은 아래와 같습니다.

 

http://www.mozilla.or.kr/ko/ 에서 파이어폭스를 다운받습니다.

 

설치후에

 

 

설치합니다.설치후 사용은 아래 처럼..

 

 

실행하시면 끝..

 

 

실행화면입니다.ㅋ

TextView 에서 스크롤 기능 추가

 

XML 부분 의 내용

 

<TextView

android:text="aaaaaaaaaaaaaaaaaaaaaaaa\n

              abbbbbbbbbbbbbbbbbbbbbbbaa\n

              ccccccccccccccac\n

              eeeeeeeeeeeeeeee\n

              errrrrrrrrrrrrrrrrr"

             

android:id="@+id/txt01"

android:layout_width="wrap_content"

android:layout_height="50px"

></TextView>

 

 

Activity 부분 (java)

 

public class MainActivity extends Activity {

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

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

            TextView txt01=(TextView)findViewById(R.id.txt01); 

//스크롤 가능

            txt01.setMovementMethod(new ScrollingMovementMethod());                         

    }

}

 

 

 

'Android' 카테고리의 다른 글

[Android]Layout 뷰의 기능들...  (0) 2012.05.25
[Android]CP(Content Provider)  (0) 2012.05.24
[Android]SQLite 접근하기  (0) 2012.05.23
[Android]SQLite Manager 설치  (0) 2012.05.23
[Android]안드로이드 이벤트 종류와 방법  (0) 2012.05.21

Event 4가지 사용 방법

 

Event 번째 방법

(1) Main.xml --> 버튼생성

<Button

android:text="OK"

android:id="@+id/btnOK"

android:layout_width="wrap_content"

android:layout_height="wrap_content"></Button>

 

(2) MainActivity.java----> 이벤트 소스 얻기

 

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

        btnOK.setText("OK!!!");->>버튼 이름

        //이벤트 처리

        //1.이벤트 소스 얻기

        btnOK.setOnClickListener(new ButtonHandler());

(3) public class ButtonHandler implements OnClickListener {<--리스너 인터페이스

                       //4.메소드 구현

public void onClick(View v) {

// TODO Auto-generated method stub

Log.i("test", "OK Click");<--로그보기

}//end onClick

}//end class

 

Event 두번째 방법

(1) main.xml

<Button

android:text="@+id/Button01"

android:id="@+id/Button01"

android:layout_width="wrap_content"

android:layout_height="wrap_content"></Button>

(2) MainActivity.java   <--inner method

public class MainActivity extends Activity implements OnClickListener {

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

    @Override

 

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        Button btnOK=(Button)findViewById(R.id.Button01);

        //이벤트 처리

        //1.이벤트 소스

        btnOK.setOnClickListener(this);

}/end conCreate

      //3 추상 메소드 구현

     public void onClick(View v){

            Log.i("test", "Ok Click");

     }

}

 

Event 세번째 방법

 <--첫번째 방법과 다른점 (  MainActivity에서 상속받지않고 핸들러에서 상속 받음 )

그럴땐 View.리스너를 해워야 한다.

public class MainActivity extends Activity {

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

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        Button btnOK=(Button)findViewById(R.id.Button01);

        btnOK.setOnClickListener(new ButtonHandler());

    }//end onCreate

    class ButtonHandler implements View.OnClickListener{

public void onClick(View v) {

// TODO Auto-generated method stub

Log.i("test", "ok!!!!!!");

}

}

}

 

Event 네번째 방법

<-- 많이 사용됨

public class MainActivity extends Activity {

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

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        Button btnOK=(Button)findViewById(R.id.Button01);

        //이벤트 처리

        //1, 2

         btnOK.setOnClickListener(new View.OnClickListener() {

//3.  자체적 상속 받음

public void onClick(View v) {

// TODO Auto-generated method stub

Log.i("test","ok!!!ASDFSADFSADFSADF");

}

}

);

}

}

 

Evet 응용

public class MainActivity extends Activity {

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

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        //OK

        Button btnOK= (Button)findViewById(R.id.Button01);

       

        //Cancle

        Button btnCancle=(Button)findViewById(R.id.Button02);

              

        //이벤트 처리

        //1.

         btnCancle.setOnClickListener(new ButtonHandler());

         btnOK.setOnClickListener(new ButtonHandler());

    }//end onCreate

   

    //2. inner Class

 

    class ButtonHandler implements View.OnClickListener{

            //3.

public void onClick(View v) {

switch(v.getId()){ <-- ButtonView ID //외울것

case  R.id.Button01:

Log.i("test", "OK click");

break;

case R.id.Button02:

Log.i("test", "Cancel click"); 

break;

}

}

}

}

'Android' 카테고리의 다른 글

[Android]Layout 뷰의 기능들...  (0) 2012.05.25
[Android]CP(Content Provider)  (0) 2012.05.24
[Android]SQLite 접근하기  (0) 2012.05.23
[Android]SQLite Manager 설치  (0) 2012.05.23
[Android]TextView 에서 스크롤 기능 추가  (0) 2012.05.22