2010-04-14 10 views
39

J'ai une scrollview Android avec un fond blanc. Le bord estompé est un dégradé blanc translucide. Je voudrais le changer soit noir au lieu de blanc. J'ai un ListView dans le même projet avec un fond blanc qui a un bord noir de fondu par défaut, mais je ne peux pas trouver où (si n'importe où) qui a été placé.Comment définir la couleur d'un bord fading Android ScrollView?

Répondre

37

Je viens de le découvrir par essais et erreurs.

Réglez simplement android:background="@color/yourColor" pour le <ScrollView>. Il va définir l'ombre à la couleur donnée.

+0

Oui, diaboliquement simple. Comme vous l'imaginez, il vous suffit alors de mettre l'enfant immédiat scrollview sur l'arrière-plan que vous voulez. Merci! –

+2

Selon le temps de chargement de la liste, cela peut sembler gênant. (par exemple, listview apparaît avec la couleur d'arrière-plan avant que les cellules de la liste ne soient dessinées en haut) ... – bernstein

+0

Il serait préférable de définir la même couleur que l'arrière-plan de vos cellules et la liste. Ensuite, changez simplement le cachecolorhint à la couleur d'évanouissement de bord désirée – bernstein

5

EDIT: cela ne répond pas à la question, qui demandait ScrollView. Cette réponse ne fonctionne que sur AbsListView et les descendants (y compris ListView).


décoloration de bord est commandé par l'attribut android:cacheColorHint.

.: par exemple

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

aura comme arrière-plan blanc, et le cacheColorHint est utilisé pour dessiner la couleur de la décoloration bord - dans ce cas, il serait noir.

+7

J'ai essayé cet attribut, mais cela ne fonctionne pas. Il semble que cet attribut/méthode ne s'applique qu'à [AbsListView] (http://developer.android.com/intl/fr/reference/android/widget/AbsListView.html#setCacheColorHint%28int%29). –

+0

Qu'en est-il de http://developer.android.com/intl/zh-CN/reference/android/view/View.html#setDrawingCacheBackgroundColor%28int%29? – Joe

+0

J'ai eu cette question à propos d'un horizontalscrollview, et les modifications ci-dessus pour le xml travaillé pour cela (au moins sur l'émulateur). – Gimbl

3

Si vous ne savez pas ce qui a changé la couleur de votre contour, c'est probablement l'application d'un style ou d'un thème. Vérifiez votre manifeste pour android:theme="something" dans une activité. Si le thème provient du groupe android.R.style.Theme.Light, le bord sera blanc. Les valeurs par défaut android.R.style.Theme et android.R.style.Theme.Black ont des bords de fondu noirs. Les thèmes affectent également d'autres attributs, vérifiez donc les attributs complètement avant de les lancer pour une chose.

+0

J'ai coché le thème Activité, il s'agit de @android: style/Theme.NoTitleBar dont [source] (http://www.google.com/codesearch/p?hl=fr#uX1GffpyOZk/core/res/res /values/themes.xml&q=Theme.NoTitleBar&sa=N&cd=12&ct=rc) contient seulement android: windowNoTitle = true. –

+1

Le commentaire au-dessus: '' Donc, vous utilisez le thème sombre qui comprend des bords de fading noir. vous voulez 'Theme.Light.NoTitleBar' – jqpubliq

+0

J'ai changé pour ce thème, et cela n'a pas affecté la couleur de l'évanouissement. –

73

Si vous souhaitez un bord d'évanouissement de couleur différent de l'arrière-plan, vous devez remplacer la méthode getSolidColor() de ScrollView. Par exemple:

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

Je ne sais pas pourquoi personne n'a voté ce qui est clairement la réponse la plus générale et la meilleure. Il suffit de regarder JavaDoc de View et il énonce clairement. – jfelectron

+1

Il a raison, c'est la seule façon d'obtenir une zone de fondu de couleur tout en utilisant une image de fond. Juste étendre la classe ListView. –

+1

Une solution de classe complète pour cette question est postée ici: http://stackoverflow.com/questions/4050903/is-it-possible-de-changer-la-couleur-de-la-fadingedge-of-a-listview/ 5877824 # 5877824 –

7

Vous pouvez utiliser:

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

Bon article décrivant ceci est: http://evendanan.net/android/branding/2013/12/09/branding-edge-effect/ – easycheese

1

Faites ceci:

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

valeurs \ styles mettre le style

<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> 

oeuvres me TKS!

Questions connexes