その7の続き...
[小課題] SurfaceViewでEditorを作る。その1
- 未確定文字と確定文字について
確定文字と未確定文字の扱いについて説明します。
日本語を入力する場合、一旦、「ひらがな」を入力した後で、「漢字」に変換します。この変換される前の状態を
「未確定文字」、変換後の状態を「確定文字」と呼ぶことにします。
例えば、「お腹が空いた」と入力したい場合、
1. 「おなかがすいた」と未確定文字を入力
2. 「お腹が空いた」と確定文字に変換
となります。
APIの流れを見てみましょう。
1. IMEアプリ : フォーカスがあるViewから、InputConnectionを取得する。
2. IMEアプリ : InputConnection#setComposingText("おなかがすいた", 1);
3. Editor : 未確定文字をユーザーに表示
4. IMEアプリ : InputConnection#inputCommitText("お腹が空いた", 1);
5. Editor : 確定文字として、テキストを更新
[サンプル]
- 上記シナリオをInstrumentationで記載しました。ログを仕込めば、APIの流れがわかります。
https://github.com/kyorohiro/KyoroSamples/blob/master/KyoroSampleSurfaceViewEditor/src/info/kyorohiro/samples/android/test/CheckForComposingText.java
[PS]
- setComposingText()、inputCommitText() で渡されるテキストについて
setComposingText()、inputCommitText() で渡されるテキストはCharSequenceです。
Spannable装飾ありのテキストが渡さることがあります。
例えば、「<|>」をカーソルとします。「おなかがすいた」と入力した後で、
「おなか」だけを変換したい場合、以下のようなシナリオになります。
1.「おなかがすいた<|>」と入力
2.「おなか<|>がすいた」と移動
3.「お腹<|>がすいた」と変換
4.「お腹がすいた<|>」と確定する。
ほとんどの場合、この時のカーソル位置は、Editor側のカーソルではありません。
IMEのものです。装飾ありのテキストを使用して表現されます。
例えば、 「おなか<|>がすいた」は、「おなか」の部分の背景色をグレーにするとかしています。
※ このような変換処理は、IMEアプリ側がやってくれるわけですが、
Editor側は、装飾情報を解析して、ユーザーに表示してあげる必要があります。
- setComposingText()、inputCommitText() で渡されるnewCursorPositionについて
Editor側のカーソル位置を表しています。
* 0 の時、「<|>お腹がすいた」
* 1 の時、「お腹がすいた<|>」
となります。
2013年1月1日火曜日
KyoroText で使用されている技術 その8
登録:
コメントの投稿 (Atom)
mbedtls dart の 開発を始めた web wasm ffi io flutter
C言語 で開発した機能を、Dart をターゲットとして、Web でも サーバーでも、そして Flutter でも使えるようにしたい。 そこで、mbedtls の 暗号化の部分を Dart 向けのPackageを作りながら、 実現方法を試行錯誤する事にした。 dart...
-
[課題] Low Memory Killer を意図的に発生させたい Androidには、ヒープが涸渇すると使われていないアプリをKillする機能があります。 この記事では、意図的にヒープを枯渇させて、この状態をつくる方法について説明します。 単純にヒープを大...
-
Dart の Native Extensions を利用して、 SDL を用いたマルチプラットフォームのゲーム開発環境を作れるか検証してみた。 結論からいくと、 「Mac 上で動作する SDL x Dart の アプリは動作させることが難しいよ」 と言うことです。 Wind...
-
Emscripten と OpenGLを使ってゲームを作ろうと思いたって、 まずは、SDL2の基本的な使い方を試していた。 しかし、今の所は、SDL 1系 の方が、良いと思いました。 SDL2があるのに、SDL1 を選ぶのはなぜか? # 201...
0 件のコメント:
コメントを投稿