2010-04-14 66 views
39

我有一個白色背景的Android滾動視圖。衰落邊緣是白色半透明漸變。我想改變它是黑色而不是白色。我在同一個項目中有一個ListView,默認情況下它有一個黑色的漸變邊緣的白色背景,但我無法找到設置的位置(如果有的話)。如何設置Android ScrollView衰落邊緣的顏色?

回答

37

剛剛通過試驗和錯誤發現了它。

只需爲<ScrollView>設置android:background="@color/yourColor"即可。它會將陰影設置爲給定的顏色。

+0

是的,非常簡單。就像你想象的那樣,你只需要將scrollview immediate child設置爲你想要的背景。謝謝! – 2010-06-11 15:06:14

+2

根據列表視圖的加載時間,這可能看起來很尷尬。 (例如,列表視圖在列表單元格繪製在最上面之前以背景顏色顯示)... – bernstein 2011-05-16 12:19:25

+0

將單元格和列表視圖的背景設置爲相同的顏色會更好。然後,只需將cachecolorhint更改爲所需的邊緣褪色顏色 – bernstein 2011-05-16 12:32:33

5

編輯:這不回答問題,這是要求ScrollView。此答案只適用於AbsListView和後代(包括ListView)。


褪色邊緣顏色由android:cacheColorHint屬性控制。

例如爲:

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

將背景設置爲白色,並且cacheColorHint用於繪製衰落邊緣的顏色 - 在這種情況下,這將是黑色的。

+7

我試過這個屬性,但它不起作用。看來這個屬性/方法只適用於[AbsListView](http://developer.android.com/intl/fr/reference/android/widget/AbsListView.html#setCacheColorHint%28int%29)。 – 2010-04-16 16:02:51

+0

那麼http://developer.android.com/intl/zh-CN/reference/android/view/View.html#setDrawingCacheBackgroundColor%28int%29呢? – Joe 2010-04-20 21:19:25

+0

我有一個關於horizo​​ntalscrollview的問題,並且上面對xml的修改對它起作用(至少在模擬器上)。 – Gimbl 2011-01-29 16:09:08

3

如果您不知道什麼改變了漸變邊緣的顏色,那可能是樣式或主題的應用。在活動中檢查您的清單android:theme="something"。如果主題來自組android.R.style.Theme.Light,則邊緣將爲白色。默認的android.R.style.Themeandroid.R.style.Theme.Black將具有黑色的衰落邊緣。主題也會影響其他屬性,因此在將它們放入其中之前,請充分檢查屬性。

+0

我檢查了活動主題,它是@android:style/Theme.NoTitleBar [其來源](http://www.google.com/codesearch/p?hl=zh-CN#uX1GffpyOZk/core/res/res /values/themes.xml&q=Theme.NoTitleBar&sa=N&cd=12&ct=rc)只包含android:windowNoTitle = true。 – 2010-04-16 16:05:45

+1

上面的註釋: '<! - 默認(黑暗)主題沒有標題欄的變體 - >' 因此,您正在使用包含黑色衰落邊緣的黑暗主題。 你想'Theme.Light.NoTitleBar' – jqpubliq 2010-04-16 16:53:18

+0

我已經改變了這個主題,並沒有影響到衰落的邊緣顏色。 – 2010-04-16 18:50:50

73

如果你想要一個不同於背景的顏色漸變邊緣,你必須重寫ScrollView的getSolidColor()方法。例如:

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

我不知道爲什麼沒人投票決定最明確,最通用和最好的答案。看看View的JavaDoc,它清楚地表明瞭這一點。 – jfelectron 2011-01-17 05:58:44

+1

他是對的,這是使用背景圖像時獲得彩色褪色區域的唯一方法。只需擴展ListView類。 – 2011-05-03 22:36:24

+1

這個問題的完整的類解決方案發布在這裏:http://stackoverflow.com/questions/4050903/is-it-possible-to-change-the-colour-of-the-fadingedge-of-a-listview/ 5877824#5877824 – 2011-05-04 02:37:17

7

您可以使用:

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

好文章描述這是:http://evendanan.net/android/branding/2013/12/09/branding-edge-effect/ – easycheese 2015-04-25 17:52:05

1

這樣做:

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

中值\風格把風格

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