海月玲二
2011-03-24(木)

無題

実は今のバージョンのSKK for AndroidをIS01で使うと,ひとつ難点がある.端末を再起動したとき,変換しようとすると必ずエラーで強制終了→再起動するのだ.旅行中,スペアの電池に交換するために頻繁に電源オフにしていたので気付いた.

これ自体は別に大した問題ではなくて,起動時にまだSDカードがマウントされてないうちにSKKが起動してしまうせいである(辞書が見えなくなる).だから,SDカードがマウントされてるかチェックして適当に待つようにすれば直せる.

しかし,これを直したら別の問題が出てきた.「端末再起動時に自動的にSKKが起動した場合,変換候補表示のviewが中途半端な位置に出てきて見づらい」というものである.しかも,一旦killしてSKKが起動しなおされると何事もなかったかのように普通に動作する.今までは,エラーで必然的に起動しなおされていたので気づかなかったようだ.

正確に言うと,なんだか透明なソフトキーボードが画面下部に出てでもいるかのような表示になる.アプリの画面がちょっと上に逃げ,下1/3ぐらいが無意味にあいてしまうのだ.これが実に厄介なバグで,一日悩んだがさっぱり原因がわからない.そもそもいつ起動されたかで挙動が変わるのが理解しがたい.何が違うんだろう.InputMethodServiceのisなんとか系のメソッドは全部同じ値を返すし,正確に何が起きてるのかもよくわからん.IS01のエミュレーターでは何も変なことは起きないし.うーん困ったな.

2011-03-25(金)

無題

再起動時SKKの謎の動作がどういう条件で起きるか判明した.lcd_densityを変更していると発生するらしい.つまり,端末の起動時はbuild.propでlcd_densityを設定する前にIMEが起動してしまい,画面が狭い前提でレイアウトが決定してるわけか.うーむ理屈はわかったが対処のしようがないなあ.とりあえず放置するか.

SKKをちょびっと修正.必要なとき以外は候補ウインドウを消すようにしたら,単語登録の表示が変になっていた.setCandidatesViewShown(false)とやると,どうもウインドウを消すと同時にComposingTextを吐き出すようになっているらしい.しょうがないのでモード変更の際に一旦ComposingTextをクリアし,単語登録中だけモード変更が終わったあとに改めて復活させることにした.

ていうかComposingTextを流用してないでポップアップウインドウとか出したほうがAndroid的にはいいんだろうけど.めんどくさいしなあ.

そうそう,今回のバグはunaju氏の連絡で気付いた.氏に感謝します.