본문 바로가기
OldStory/Android

TodoList -Ch4

by Alnilam 2011. 7. 14.
반응형

프로페셔널 안드로이드2 애플리케이션 개발 4장의 ToDoList

ListView는 ArrayAdapter를 사용하여 ListView내의 TextView resouce ID 값을 설정한다.

2장에서는 resourceID를 android.R.layout.simple_list_item_1를 사용하였다.

4장에서는 새로운 TextVIew를 만들어 android.R.layout.simple_list_item_1 대신

R.layout.todolist_item를 사용한다.

[java]

final ArrayAdapter<String> aa;

int resID = R.layout.todolist_item;

aa = new ArrayAdapter<String>(this, resID /*android.R.layout.simple_list_item_1*/, todoItems);

myListView.setAdapter(aa);

[/java]

R.layout.todolist_item 리소스는 xml를 사용하여 다음과 같이 추가해 준다.

todolist_item.xml

[xml]

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

<com.paad.todolist.TodoListItemView

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

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:padding="10dp"

android:scrollbars="vertical"

android:textColor="@color/notepad_text"

android:fadingEdge="vertical"

/>

[/xml]

그리고 com.paad.todolist.TodoListItemView 클래스를 추가 한다.  TodoListItemView 클래스는 TextView로 부터 확장(extends) 되었으며  onDraw함수에서 새로 TextView를 그린다.

TodoListItemView.java

[java]
package com.paad.todolist;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.TextView;

public class TodoListItemView extends TextView {

private Paint marginPaint;
private Paint linePaint;
private int paperColor;
private float margin;

public TodoListItemView(Context context, AttributeSet ats, int ds) {
super(context);
init();
}

public TodoListItemView(Context context) {
super(context);
init();
}

public TodoListItemView(Context context, AttributeSet attrs) {
super(context);
init();
}

private void init() {
// 리소스 테이블의 레퍼런스를 언어온다.
Resources myResources = getResources();

// onDraw 메서드에서 사용할 페인트 브러시들을 만든다.
marginPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
marginPaint.setColor(myResources.getColor(R.color.notepad_margin));
linePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
linePaint.setColor(myResources.getColor(R.color.notepad_lines));

// 종이의 배경 색상과 여백 폭을 얻어온다.
paperColor = myResources.getColor(R.color.notepad_paper);
margin = myResources.getDimension(R.dimen.notepad_margin);
}

@Override
public void onDraw(Canvas canvas){
// 종이의 배경 생상으로 칠한다.
canvas.drawColor(paperColor);

// 쾌선을 그린다.
canvas.drawLine(0,0,0, getMeasuredHeight(), linePaint);
canvas.drawLine(0, getMeasuredHeight(),
getMeasuredWidth(), getMeasuredHeight(),
linePaint);

// 여백을 그린다.
canvas.drawLine(margin, 0, margin, getMeasuredHeight(), marginPaint);

// 텍스트를 여백 맞은편으로 이동시킨다.
canvas.save();
canvas.translate(margin,0);

// TextView를 이용해 테스트를 렌더링한다.
super.onDraw(canvas);
canvas.restore();
}
}

[/java]

다음은 실행 화면이다. ListView 내의 TextView 내용이 변경된 것을 볼 수 있다.

todo_4

todo_list_ch4

반응형

'OldStory > Android' 카테고리의 다른 글

갤럭시 S2  (0) 2011.10.22
ContactPicker  (0) 2011.08.29
To Do List - Ch4  (0) 2011.08.08
Compass - Ch4  (0) 2011.07.23
ToDoList  (0) 2011.06.30