2014-12-07 20 views

cevap

37

Aşırı kaydırma parlaklığı rengi, uygulamanızın tamamında android:colorPrimary tarafından ayarlanan birincil renk değerini miras alır. Ancak farklı bir değer belirtmeniz gerekiyorsa, android:colorEdgeEffect'u kullanın. LOLLIPOP üzerinde

<style name="MyAppTheme" parent="***"> 
    <item name="android:colorEdgeEffect">@color/my_color</item> 
</style> 
+0

Bu özellik yalnızca API 21 ve üstü için kullanılabilir. – fractalwrench

+0

Evet, soru budur. –

+3

Not: android: colorPrimary', ActionBar veya Araç Çubuğunuzun rengini de ayarlar. Oysa “android: colorEdgeEffect” daha spesifiktir ve sadece ListViews, RecyclerViews vb. Için geçerlidir. –

22

kenar kızdırma colorPrimary devralır. Görünüm oluşturulduktan sonra kenar parlaklığı rengi yalnızca yansıma ile değiştirilebilir. Bu, renkleri Palette kullanarak dinamik olarak yüklediğinizde yararlı olabilir.

DÜZENLEME: TL; DR: buradan bütün dersleri indirin: https://github.com/consp1racy/android-commons/blob/master/commons/src/main/java/net/xpece/android/widget/XpEdgeEffect.java

PROGUARD AYAR: Eğer destek kitaplığından widget'lar bu kullanmak için gidiyoruz Eğer alan adlarını tutmak için gereken . bunu yapmak için hızlı bir şekilde (yine de savurgan rağmen) aşağıdaki gibidir:

-keepclassmembers class * extends android.view.View { 
    <fields>;  
} 

-keepclassmembers class android.support.v4.widget.EdgeEffectCompat { 
    <fields>;  
} 

aşağıdaki kodu ile yardımcı sınıf oluşturmak:

private static final Class<?> CLASS_SCROLL_VIEW = ScrollView.class; 
private static final Field SCROLL_VIEW_FIELD_EDGE_GLOW_TOP; 
private static final Field SCROLL_VIEW_FIELD_EDGE_GLOW_BOTTOM; 

private static final Class<?> CLASS_LIST_VIEW = AbsListView.class; 
private static final Field LIST_VIEW_FIELD_EDGE_GLOW_TOP; 
private static final Field LIST_VIEW_FIELD_EDGE_GLOW_BOTTOM; 

static { 
    Field edgeGlowTop = null, edgeGlowBottom = null; 

    for (Field f : CLASS_SCROLL_VIEW.getDeclaredFields()) { 
    switch (f.getName()) { 
     case "mEdgeGlowTop": 
     f.setAccessible(true); 
     edgeGlowTop = f; 
     break; 
     case "mEdgeGlowBottom": 
     f.setAccessible(true); 
     edgeGlowBottom = f; 
     break; 
    } 
    } 

    SCROLL_VIEW_FIELD_EDGE_GLOW_TOP = edgeGlowTop; 
    SCROLL_VIEW_FIELD_EDGE_GLOW_BOTTOM = edgeGlowBottom; 

    for (Field f : CLASS_LIST_VIEW.getDeclaredFields()) { 
    switch (f.getName()) { 
     case "mEdgeGlowTop": 
     f.setAccessible(true); 
     edgeGlowTop = f; 
     break; 
     case "mEdgeGlowBottom": 
     f.setAccessible(true); 
     edgeGlowBottom = f; 
     break; 
    } 
    } 

    LIST_VIEW_FIELD_EDGE_GLOW_TOP = edgeGlowTop; 
    LIST_VIEW_FIELD_EDGE_GLOW_BOTTOM = edgeGlowBottom; 
} 

@TargetApi(Build.VERSION_CODES.LOLLIPOP) 
public static void setEdgeGlowColor(AbsListView listView, int color) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    try { 
     EdgeEffect ee; 
     ee = (EdgeEffect) LIST_VIEW_FIELD_EDGE_GLOW_TOP.get(listView); 
     ee.setColor(color); 
     ee = (EdgeEffect) LIST_VIEW_FIELD_EDGE_GLOW_BOTTOM.get(listView); 
     ee.setColor(color); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    } 
} 

@TargetApi(Build.VERSION_CODES.LOLLIPOP) 
public static void setEdgeGlowColor(ScrollView scrollView, int color) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    try { 
     EdgeEffect ee; 
     ee = (EdgeEffect) SCROLL_VIEW_FIELD_EDGE_GLOW_TOP.get(scrollView); 
     ee.setColor(color); 
     ee = (EdgeEffect) SCROLL_VIEW_FIELD_EDGE_GLOW_BOTTOM.get(scrollView); 
     ee.setColor(color); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    } 
} 
+1

Güzel! Işıma rengini programatik olarak değiştirmenin bir yolunu arıyordum ve her cevap stili xml'de ayarlamaya bağlıydı. Seninki benim için bir sorun olmadan çalıştı ve şimdi statusbarcolor ve araç çubuğu için yaptığım gibi içeriğe bağlı olarak rengi dinamycally değiştirebilirim. Teşekkürler! – MrBrightside

+0

Teşekkürler. güzel çalışıyor. ama ne 'RecyclerView' hakkında? – sajad

+1

@sajad Kaydırma konteynerlerinin çoğunun üstesinden gelmek için kullandığım sınıf http://pastebin.com/TAujMUu9 Tek eksik olan 'HorizontalScrollView' olduğunu düşünüyorum. –