マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

自作エディタを目指して その9

キャレットの描画と入力されたテキストの挿入をやった。Caretインターフェースのメソッドの名前を変えたり、引数を増やしたりメソッドの追加などをした。これだけあれば、テキストの挿入位置や描画の位置などに困らないはず。折り返し改行などでrowとcolumnからxとyを特定できないことがあるので、drawでは描画する座標が必要となる

import android.graphics.Canvas;
import android.graphics.Paint;

public interface Caret {
    int getColumn();
    int getRow();
    void move(int column, int row);
    void setColor(int color);
    void draw(Canvas canvas, int x, int y, int fontsize, Paint paint);
}

テキストの挿入は、Caretのrowとcolumnを取得して、挿入するテキストと共に、テキストを管理しているDocumentクラスの以下のメソッドに渡す。そして再描画させると、変更後のテキストが描画される。

public void insert(int row, int column, String text){
    texts.get(row).insert(column, text);
}

しかし、問題発生。onKeyDownでキャレットを動かせないようだ。そもそもonKeyDownが発生してない?フォーカスされてないとテキストの入力もできないから、フォーカスされてるはずなんだけど…