2011年02月27日

やっぱり駄目だぁ!(EditTextのスクロール)

先日EditTextにScrollViewを組み込んで実用的なスクロール速度になったというエントリーを書いて、いい気になっていた私ですが、テストしていたら大問題が発覚して再び失意のズンドコ、じゃなかったどん底に陥りました。
というのは、スクロールしていって、どこかでタップすると、EditTextの読み込んでいる文書の先頭行にカーソルが戻ってしまうのです。
最初はどこかで記述ミスでもしているのかと思ったのですが、どうもそうじゃないらしい。少なくとも記述ミスは見つけられないのです。一昨日からずっとこの問題が気になって気になって、ずっとやっているのですが、解決できません。
このスクロール速度は(ScrollViewを使わない場合が異常に遅いため)捨てがたいので、どうしても解決したいのですが、どうにもうまくいきません。
とはいえ、ある程度までは改善する方法はあるのですが、これにも深刻な問題があります。
その方法は

editText.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
editText.scrollTo(0,scrollView.getScrollY());
editText.moveCursorToVisibleOffset();
return false;
}
});

として、editTextをScrollViewのスクロールしたところまでスクロールさせる方法。
実際はタップした場所とカーソルが移る場所がなぜか微妙にずれているように見えますが、タップと同時にソフトキーボードが出てしまうので、はっきり分からないながらも近い位置にカーソルが移動します。
これがeditText.setSelection(etBody.getSelectionStart());とかではNGなので、現状としてはもっとも解決に近いように思えますが、スクロールを続けて読み込んでいる文書の末尾を過ぎてもスクロールし、画面が真っ白になってしまいます。
if(scrollView.getScrollY() < editText.getBottom()){}などと制限をかけてみても変わらず。

なので、実際には使い物になりません。

絶対にどこか間違いをしているのではないかと思いますが、なぜこんな単純なことが単純にできないのかも疑問に思います。
しかもWebで情報を探しても例えば「Andorid EditText スクロール」とかで検索しても驚くほど情報は少ないのです。
同じようなことをしている人はたくさんいそうなものなのに不思議です。
エディタ系のアプリを作成している人はどうしているのだろうかとも思います。
ソースを見せて欲しい。(笑)

いずれにしてもこの問題が解決しないと公開できない気がしています。
もう三月になるというのに、いつになったら完成するものやら。
しかも、完成が遅れまくったことによりシーズン到来!(花粉の)
そのため、集中力が20%以下になり、ただでさえ他の人より集中力がないので、常人の100分の1くらいの集中力で作業をしなければいけないのではないでしょうか?

ああ、もうアプリ公開などということは、僕にとっては永遠に「到達不能コード」なのでしょうか?
posted by 白虹 at 22:15| Comment(1) | TrackBack(0) | Android開発