2010-04-14 11 views
39

Ich habe eine Android Scrollview mit einem weißen Hintergrund. Die Fading-Kante ist ein weißer transluzenter Verlauf. Ich würde es gerne schwarz statt weiß ändern. Ich habe eine ListView in demselben Projekt mit einem weißen Hintergrund, der standardmäßig eine schwarze Fading-Kante hat, aber ich kann nicht finden, wo (wenn irgendwo) das gesetzt wurde.Wie stellt man die Farbe einer Android ScrollView Fade Edge ein?

Antwort

37

fand es nur durch Versuch und Irrtum heraus.

Stellen Sie einfach android:background="@color/yourColor" für die <ScrollView>. Es wird den Schatten auf die angegebene Farbe setzen.

+0

Ja, teuflisch einfach. Wie Sie sich vorstellen können, müssen Sie dann das direkte Kind der Scrollview auf den gewünschten Hintergrund einstellen. Vielen Dank! –

+2

Abhängig von der Ladezeit der Listview kann dies peinlich sein. (z. B. wird Listenansicht mit der Hintergrundfarbe angezeigt, bevor die Listenzellen oben angezeigt werden) ... – bernstein

+0

Es wäre besser, die gleiche Farbe wie den Hintergrund Ihrer Zellen und die Listenansicht festzulegen. Dann ändern Sie einfach das CacheColorHinting auf die gewünschte Kantenüberblendfarbe – bernstein

5

BEARBEITEN: Dies beantwortet nicht die Frage, die nach ScrollView gefragt wurde. Diese Antwort funktioniert nur auf AbsListView und Nachkommen (einschließlich ListView).


Die Farbe der schwindenden Kante wird durch das Attribut android:cacheColorHint gesteuert.

Z. B .:

<ScrollView android:cacheColorHint="#ff000000" android:background="#ffffffff" />

den Hintergrund auf weiß gesetzt, und die cacheColorHint verwendet wird, um die verblassenden Rand Farbe zu ziehen - in diesem Fall würde es schwarz sein.

+7

Ich habe dieses Attribut versucht, aber es funktioniert nicht. Es scheint, dass dieses Attribut/Verfahren gelten nur für [AbsListView] (http://developer.android.com/intl/fr/reference/android/widget/AbsListView.html#setCacheColorHint%28int%29). –

+0

Was ist mit http://developer.android.com/intl/zh-CN/reference/android/view/View.html#setDrawingCacheBackgroundColor%28int%29? – Joe

+0

Ich hatte diese Frage über eine horizontalscrollview, und die obigen Änderungen an der XML funktionierten dafür (zumindest auf dem Emulator). – Gimbl

3

Wenn Sie nicht wissen, was die Farbe des verblassenden Rand geändert, es war wahrscheinlich die Anwendung eines Stils oder Thema. Überprüfen Sie Ihr Manifest für android:theme="something" in einer Aktivität. Wenn das Thema aus der Gruppe android.R.style.Theme.Light stammt, wird die Kante weiß sein. Die Standardwerte android.R.style.Theme und android.R.style.Theme.Black haben schwarze Fading-Kanten. Themen wirken sich auch auf andere Attribute aus. Überprüfen Sie daher die Attribute vollständig, bevor Sie sie für eine Sache einwerfen.

+0

Ich habe das Thema Aktivität überprüft, es ist @android: style/Theme.NoTitleBar die [Quelle von dem] (http://www.google.com/codesearch/p?hl=de#uX1GffpyOZk/core/res/res /values/themes.xml&q=Theme.NoTitleBar&sa=N&cd=12&ct=rc) enthält nur android: windowNoTitle = true. –

+1

Der Kommentar darüber: '' So verwenden Sie das dunkle Thema, das schwarze verblassende Ränder enthält. Sie wollen 'Theme.Light.NoTitleBar' – jqpubliq

+0

Ich habe zu diesem Thema geändert, und es hat die verblassende Kante Farbe nicht beeinflusst. –

73

Wenn Sie eine andere Farbe Rand wollen als den Hintergrund verblaßt, müssen Sie die Scroll des getSolidColor() -Methode außer Kraft setzen. Zum Beispiel:

@Override 
public int getSolidColor() { 
    return Color.rgb(0x30, 0x30, 0x30); 
} 
+1

Ich weiß nicht, warum niemand gewählt hat, was eindeutig die allgemeinste und beste Antwort ist. Schau dir einfach JavaDoc von View an und es wird deutlich gesagt, wie viel. – jfelectron

+1

Er hat Recht, nur so kann man einen farbigen Bereich bei der Verwendung eines Hintergrundbildes erhalten. Erweitern Sie einfach die ListView-Klasse. –

+1

Eine komplette Klassenlösung für diese Frage ist hier veröffentlicht: http://StackOverflow.com/Questions/4050903/IS-possible-to-change-the-colour-of-the-Fadingegedge-of-a-listview/ 5877824 # 5877824 –

7

können Sie verwenden:

final int glowDrawableId = context.getResources().getIdentifier("overscroll_glow", 
      "drawable", "android"); 
    final Drawable androidGlow = context.getResources().getDrawable(glowDrawableId); 
    androidGlow.setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN); 

    int edgeDrawableId = context.getResources().getIdentifier("overscroll_edge", "drawable", 
      "android"); 
    final Drawable androidEdge = context.getResources().getDrawable(edgeDrawableId); 
    androidEdge.setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN); 
+1

Guter Artikel, der dies beschreibt, ist: http://evendanan.net/android/branding/2013/12/09/branding-edge-effect/ – easycheese

1

tun:

<ScrollView 
    android:theme="@style/scrollUpdate" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" > 

in Werte \ styles den Stil

<style name="scrollUpdate"> 
    <item name="colorAccent">@color/yourcolor</item> 
    <item name="android:color">@color/yourcolor</item> 
    <item name="colorPrimary">@color/yourcolor</item> 
    <item name="colorPrimaryDark">@color/yourcolor</item> 
</style> 
tks mir

Werke setzen!