複数の動的要素/行を含むリスト (LinearLayout) を正常に作成しました。Web サービスによって受信されたコンテンツで満たされます。行ごとの要素の 1 つは、可変量の EditText フィールドを含む HorizontalScrollView です。
これは、すべての行 (ヘッダーを含む) のすべての edittext がその horizontalScrollView でスクロールできることを意味します。
Scrollmanager は、すべての horizontalScrollviews が同時に移動することを確認します。したがって、基本的にはリスト内のスクロール可能な列です。
私が経験している問題は次のとおりです。
EditText ビューを選択すると、キーボードが表示されます。これは、私がやりたいことです。ただし、scrollManager がトリガーされるため、すべての horizontalscrollviews が最後までスクロールされます。フォーカスされた編集テキストを画面内に保持する代わりに、視界の外に移動します。
私の ScrollManager OnScrollChanged
@Override
public void onScrollChanged(View sender, int l, int t, int oldl, int oldt) {
// avoid notifications while scroll bars are being synchronized
if (isSyncing)
return;
isSyncing = true;
// remember scroll type
if (l != oldl)
scrollType = SCROLL_HORIZONTAL;
else if (t != oldt)
scrollType = SCROLL_VERTICAL;
else {
// not sure why this should happen
isSyncing = false;
return;
}
// update clients
for (ScrollNotifier client : clients) {
View view = (View) client;
if (view == sender)
continue; // don't update sender
// scroll relevant views only
// TODO Add support for horizontal ListViews - currently weird things happen when ListView is being scrolled horizontally
if ((scrollType == SCROLL_HORIZONTAL && view instanceof HorizontalScrollView)
|| (scrollType == SCROLL_VERTICAL && view instanceof ScrollView)
|| (scrollType == SCROLL_VERTICAL && view instanceof ListView)) {
view.scrollTo(l, t);
}
}
isSyncing = false;
}
最後に、キーボードを表示してスクロールビューをスクロールできるようにしたいのですが、キーボードが表示されたときに水平スクロールイベントを防ぎたいです。