Wie ändert man die Farbe der Über-Scroll-Kante und Über-Scroll-Glühen oder wie ändert man die weiße Farbe (Standardfarbe) von Android 5.0 Lollipop Release?Wie ändert man die Farbe von Overscroll-Kante und Overscroll-Glühen
Antwort
Die Overscroll-Leuchtfarbe erbt den Primärfarbenwert, der in Ihrer gesamten App durch android:colorPrimary
festgelegt wurde. Wenn Sie jedoch einen anderen Wert angeben müssen, verwenden Sie einfach android:colorEdgeEffect
.
<style name="MyAppTheme" parent="***">
<item name="android:colorEdgeEffect">@color/my_color</item>
</style>
Dieses Attribut ist nur für API 21 und höher verfügbar. – fractalwrench
Ja, das ist, was die Frage besagt. –
Beachten Sie, dass 'android: colorPrimary' auch die Farbe Ihrer ActionBar oder Toolbar festlegt. Wohingegen 'android: colorEdgeEffect' spezifischer ist und nur für ListViews, RecyclerViews usw. gilt. –
Auf LOLLIPOP
der Rand glow erbt von colorPrimary
. Nachdem die Ansicht erstellt wurde, kann die Kantenglühfarbe nur durch Reflexion geändert werden. Dies kann nützlich sein, wenn Sie Farben dynamisch mit Palette
laden.
EDIT: TL; DR: die ganze Klasse Download von hier: https://github.com/consp1racy/android-commons/blob/master/commons/src/main/java/net/xpece/android/widget/XpEdgeEffect.java
PROGUARD SETUP: Wenn Sie vorhaben, diese von Support-Bibliothek auf Widgets zu verwenden, müssen Sie die Feldnamen halten . Schnellste Weg, es zu tun, ist die folgende (wenn auch noch verschwenderisch):
-keepclassmembers class * extends android.view.View {
<fields>;
}
-keepclassmembers class android.support.v4.widget.EdgeEffectCompat {
<fields>;
}
Erstellen Sie eine Utility-Klasse mit dem folgenden Code:
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();
}
}
}
Schön! Ich suchte nach einer Möglichkeit, die Leuchtfarbe programmgesteuert zu ändern, und jede Antwort bezog sich auf das Festlegen des Stils in XML. Deine Arbeit hat für mich problemlos funktioniert und ich kann jetzt die Farbe dynamisch ändern, abhängig vom Kontext, wie ich es für die Statusleiste und die Werkzeugleiste mache. Vielen Dank! – MrBrightside
danke. es funktioniert gut. Aber was ist mit 'RecyclerView'? – sajad
@sajad Hier ist die Klasse, die ich verwende, um die Mehrheit der Scroll-Container zu behandeln http://pastebin.com/TAujMUu9 Die einzige fehlende ist 'HorizontalScrollView' denke ich. –
möglich Duplikat [android Lutscher Scrollkanteneffekt color] (http: //stackoverflow.com/questions/27104521/android-lollipop-scrollview-edge-effect-color) – alanv