その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する機能があります。 この記事では、意図的にヒープを枯渇させて、この状態をつくる方法について説明します。 単純にヒープを大...
-
UPnPを用いて、NAT越えできました。しかし、ルータがUPnPをサポートしていなかったり。UPnPだけでは越えられないNATがあります。 本文では、その代案として前回解説できなかった。「適当なサーバーに接続してみて、相手から見えているアドレスを返してもらう方法」について解...
-
Dart の Native Extensions を利用して、 SDL を用いたマルチプラットフォームのゲーム開発環境を作れるか検証してみた。 結論からいくと、 「Mac 上で動作する SDL x Dart の アプリは動作させることが難しいよ」 と言うことです。 Wind...
0 件のコメント:
コメントを投稿