2010.9.26(3)———android sampleのNotepad(下線付きTestView)
2010.9.26(3)———android sampleのNotepad(下線付きTestView)
参考:
http://www.cnblogs.com/phinecos/archive/2009/08/27/1555221.html
notepadの中で記事に使うTextView
xml
参考:
http://www.cnblogs.com/phinecos/archive/2009/08/27/1555221.html
notepadの中で記事に使うTextView
public static class LinedEditText extends EditText {
private Rect mRect;
private Paint mPaint;
// we need this constructor for LayoutInflater
public LinedEditText(Context context, AttributeSet attrs) {
super(context, attrs);
mRect = new Rect();
mPaint = new Paint();
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setColor(0x800000FF);
}
@Override
protected void onDraw(Canvas canvas) {
int count = getLineCount();
Rect r = mRect;
Paint paint = mPaint;
for (int i = 0; i < count; i++) {
int baseline = getLineBounds(i, r);
canvas.drawLine(r.left, baseline + 1, r.right, baseline + 1, paint);
}
super.onDraw(canvas);
}
}
主な仕事はOnDraw方法であり、TextViewから継承されたgetLine Count関数を利用してテキストの占める行数を取得し、get Line Boundsを利用して特定行の基準高さ値を取得し、この関数の2番目のパラメータはこの行の「外装」の値を返します。これらの値を使って行の線を描きます。xml
<view xmlns:android="http://schemas.android.com/apk/res/android"
class="com.example.android.notepad.NoteEditor$LinedEditText"
android:id="@+id/note"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent"
android:padding="5dip"
android:scrollbars="vertical"
android:fadingEdge="vertical"
android:gravity="top"
android:textSize="22sp"
android:capitalize="sentences"
/>