1

の最後にHorizontalScrollView、スクロール コンテンツが終了したことを示すライトが表示されます。この色を変える方法はありますか?それは私の電話に黄色いものとして表示されています。の背景色を希望する色に設定しましたHorizontalScrollViewが、この「スクロールの終わり」の光は私が望むものではありません。

編集: このライトが原因で表示されることに気付きましたonOverScrollMode(API レベル 9 以降 -このリンクを参照してください)。OVER_SCROLL_NEVER を設定し、Eclair バージョンとの互換性を維持する方法はありますか? またはさらに良い: このライトの色を設定するには (表示される場合)?

4

3 に答える 3

2

残念ながら、OverScroll EdgeEffect の色を設定する簡単な方法はありません。

OVER_SCROLL_NEVER を安全に設定し、初期の SDK リビジョンとの互換性を維持するには、setOverScrollMode メソッドをイントロスペクトし、見つかった場合はそれを呼び出します。(3.1 と 2.2 でテスト済み)

    setContentView(R.layout.main);

    // find scroll view         
    HorizontalScrollView hscroll = (HorizontalScrollView)findViewById(R.id.hscroll);
    try {
        // look for setOverScrollMode method
        Method setOverScroll = hscroll.getClass().getMethod("setOverScrollMode", new Class[] { Integer.TYPE } );

        if (setOverScroll != null) {
            try {
              // if found call it (OVER_SCROLL_NEVER == 2)
              setOverScroll.invoke(hscroll, 2);
            } catch (InvocationTargetException ite) {       
            } catch (IllegalAccessException ie) {
            }               
        }
        } catch (NoSuchMethodException nsme) {          
    }
于 2011-12-28T00:06:27.400 に答える
1

この質問には既に回答がありますが、overScrollMode 属性を設定する方法をいくつか追加したいと思います。

1) 「layout-v10」フォルダーを作成し、必要に応じて overScrollMode 属性を設定して代替 xml レイアウトを配置します。

2) #1 が大量のファイルと複製をコピーすることを意味する場合は、代わりに Horizo​​ntalScrollView のスタイルを作成できます。

于 2012-04-09T23:39:12.663 に答える
1

EdgeEffect反射を使用して色を設定できます。以下は API 14+ から機能します。

public static void setEdgeGlowColor(final HorizontalScrollView hsv, final int color) {
    try {
        final Class<?> clazz = HorizontalScrollView.class;
        for (final String name : new String[] {
                "mEdgeGlowLeft", "mEdgeGlowRight"
        }) {
            final Field field = clazz.getDeclaredField(name);
            field.setAccessible(true);
            setEdgeEffectColor((EdgeEffect) field.get(hsv), color);
        }
    } catch (final Exception ignored) {
    }
}

public static void setEdgeEffectColor(final EdgeEffect edgeEffect, final int color) {
    try {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            edgeEffect.setColor(color);
            return;
        }
        final Field edgeField = EdgeEffect.class.getDeclaredField("mEdge");
        edgeField.setAccessible(true);
        final Field glowField = EdgeEffect.class.getDeclaredField("mGlow");
        glowField.setAccessible(true);
        final Drawable mEdge = (Drawable) edgeField.get(edgeEffect);
        final Drawable mGlow = (Drawable) glowField.get(edgeEffect);
        mEdge.setColorFilter(color, PorterDuff.Mode.SRC_IN);
        mGlow.setColorFilter(color, PorterDuff.Mode.SRC_IN);
        mEdge.setCallback(null); // free up any references
        mGlow.setCallback(null); // free up any references
    } catch (final Exception ignored) {
    }
}
于 2015-01-20T20:52:00.157 に答える