프로페셔널 안드로이드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 내용이 변경된 것을 볼 수 있다.
'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 |