2

AZ ではなく時間を使用する FastScroll メカニズムを使用して ListView を実装しようとしています。

残念ながら、FastScroller インデックスで使用されるレイアウトへの道を見つけることができないようです - 非常に大きな白いテキストで小さな黒い四角形を表示することが決定されているようです

私はソースを見てきました:

これらはどちらも、主要な高速スクロール メンバー変数が非公開であり、使用されるリソース ID が固定されていることを示しているようです。

mOverlayDrawable = res.getDrawable(com.android.internal.R.drawable.menu_submenu_background);

これをオーバーライドする方法はありますか? 理想的には、2.2 をターゲットにしています。以上。

4

1 に答える 1

1

次のような方法でリフレクションを試すことができます。

try {
  Field scrollerField = AbsListView.class.getDeclaredField("mFastScroller"); //java.lang.reflect.Field
  scrollerField.setAccessible(true);
  FastScroller instance = scrollerField.get(listViewInstance);

  Field overlayField = instance.getClass().getDeclaredField("mOverlayDrawable");
  overlayField.setAccessible(true);
  overlayField.set(instance, yourValueHere);
} catch (Exception e) {
  Log.d("Error", "Could not get fast scroller");
}

タイプしただけなので、すぐにコンパイルできる場合とそうでない場合がありますが、それがアイデアです。フィールドがすべてのバージョンで同じように呼び出されているかどうかは確認していません。調整が必要になる場合があります。

于 2012-03-24T21:41:19.470 に答える