2012-02-19 94 views
2

私はリストビューのfastscrollタブをカスタムサムタブにしたいアプリケーションをやっています。オンラインドキュメントを読んで私は、これはそれを行うだろうと思った:Android ListView fastScrollThumbDrawableが動作しない

<ListView 
android:id="@android:id/list" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:drawSelectorOnTop="false" 
android:cacheColorHint="@color/myWhite" 
android:scrollbars="vertical" 
android:scrollbarThumbVertical="@drawable/scrollthumb" 
android:scrollbarSize="12dip" 
android:fastScrollThumbDrawable="@drawable/scrollbar_thumb" 
android:fastScrollEnabled="true" 
/> 

リストビューは、カスタムスクロールバーの色が働くとfastscrollbar]タブが表示され、それはデフォルトの親指のイメージではなくPNGを使用しているが、大丈夫ですファイルscrollbar_thumb

親指イメージは特定の形式またはサイズである必要がありますか? カスタムグラフィックに変更できますか?親指の色を少なくとも変更することはできませんか?

すべてのヘルプは非常に属性が唯一のAndroid APIレベル11以降に適用されることを

答えて

0

注意を理解されるであろう。リストビューのXML定義では

http://developer.android.com/reference/android/R.attr.html

+0

鉱山はまだICSで何もしません。アプリケーションにテーマを適用して、カスタムの高速スクロールを取得する必要がありました。 – sgarman

+1

@sgarman、カスタムfastscrollの親指を取得するためにアプリケーションにテーマを適用することによって何を意味するのか(おそらく答えでしょうか)教えてください。 – Rick

2

android:fastScrollEnabled="true" 

またはコードで

listView.setFastScrollEnabled(true); 

を追加し、次のように解像度/描画可能フォルダ内のファイルfastscroll_thumb.xmlを作成します。

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@drawable/fastscroll_pressed" /> 
    <item android:drawable="@drawable/fastscroll" /> 
</selector> 
AndroidManifest.xmlで

は、アプリケーションのカスタムテーマを設定します。

<application 
    android:theme="@style/ApplicationTheme" 
    ...> 

のresフォルダ内の値のフォルダを作成します。次のように解像度/値のthemes.xmlファイルを作成します。

最後
<resources> 
    <style name="ApplicationTheme"> 
     <item name="android:fastScrollThumbDrawable">@drawable/fastscroll_thumb</item> 
    </style> 
</resources> 

は私が使用している

+0

私はあなたの明確な説明が好きです。なぜ私はAndroid:themeをLinearLayout要素の別のレイアウトファイルの代わりにAndroidManifestに設定する必要があるのか​​分かりません。 –

+0

これが書かれたアンドロイドのバージョンでは、高速スクロールサムネイルを変更する唯一の方法は、アプリケーションテーマを使用してアプリケーション全体に設定することでした。 LinearLayout上にアンドロイドの最新バージョンで設定することは可能かもしれませんが、私はそれをチェックして、あなたに連絡しなければなりません。 – JeffG

0

が、私はなぜ知らないfastscroll.pngとfastscroll_pressed.pngがあなたの描画可能なフォルダに存在することを確認してくださいそれは働いていないので、Web上で検索すると、hereハードコードソリューションが見つかりました、私はそれが古いAPIで動作するかどうかはわかりませんが、私の場合は問題を解決しました。注:私はターゲットのようなAPI 18とAPI 17を持つデバイスを使ってテストしています。

コード:

try { 
    Field f = AbsListView.class.getDeclaredField("mFastScroller"); 
    f.setAccessible(true); 
    Object o = f.get(<<your listView here>>); 
    f = f.getType().getDeclaredField("mThumbDrawable"); 
    f.setAccessible(true); 
    Drawable drawable = (Drawable) f.get(o); 
    drawable = getResources().getDrawable(R.drawable.<<your thumb drawable here can be a selector>>); 
    f.set(o, drawable); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
0

あなたはコンテキストのテーマを使用する必要がSectionIndexerfastScrollThumbDrawablefastScrollTrackDrawable、またはfastscrollのテキストの色を変更するには。他の回答は、これを行うにはAndroidManifest経由でアプリケーションのテーマをオーバーライドすることをお勧めします。それはうまくいきますが、ListViewごとに異なるスクロールバーの外観が必要な場合は、それを行うことはできません。また、SectionIndexerのテキストの色を変更する方法は、他の望ましくない効果がある可能性があるため、あなたのアプリのテーマでは実行しないでください。

ファストスクロールのためにListViewをスタイルする最も良い方法は、ContextThemeWrapperを使用するカスタムListViewを作成することです。

public class FastscrollThemedListView extends ListView { 
    public FastscrollThemedListView(Context context, AttributeSet attrs) { 
     super(new ContextThemeWrapper(context, R.style.FastScrollTheme), attrs); 
    } 
} 

あなたが必要とするすべてである:ここでは

は一例です。あなたのスタイルは、次のようになります。

<style name="FastScrollTheme"> 
    <item name="android:textColorPrimary">?android:textColorPrimaryInverse</item> 
    <item name="android:fastScrollThumbDrawable">@drawable/fast_scrollbar_thumb</item> 
    <item name="android:fastScrollTrackDrawable">@drawable/fast_scrollbar_track</item> 
</style> 

textColorPrimaryあなたはフックどのようにあなたがそれを使用する場合はSectionIndexerフォントの色をフックする方法です。

あなたのListViewは次のようになります。

<com.yourapp.view.FastscrollThemedListView 
    android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:drawSelectorOnTop="false" 
    android:cacheColorHint="@color/myWhite" 
    android:scrollbars="vertical" 
    android:scrollbarSize="12dip" 
    android:fastScrollEnabled="true"/> 
0

を私は以前の回答をテストし、高速スクロール用のカスタム親指アイコンの最低要件/ wが、この簡易版を思い付いた:

Androidのマニフェスト: (アプリケーションタグ)

android:theme="@style/ApplicationTheme"

RES /値/ themes.xml:

<resources> 
    <style name="ApplicationTheme"> 
    <item name="android:fastScrollThumbDrawable">@drawable/scrollbar</item> 
    </style> 
</resources> 

レイアウト\ activity_main.xml: (またはあなたのビューでは、&にこれを適用する高速スクロール可能にすることである場所) ADDこのattibute:

<ListView android:fastScrollEnabled="true" />

関連する問題