【问题标题】:How to set the color of an Android ScrollView fading edge?如何设置 Android ScrollView 褪色边缘的颜色?
【发布时间】:2011-02-08 02:41:21
【问题描述】:

我有一个白色背景的 Android 滚动视图。褪色边缘是白色半透明渐变。我想把它改成黑色而不是白色。我在同一个项目中有一个 ListView,其背景为白色,默认情况下具有黑色渐变边缘,但我找不到设置的位置(如果有的话)。

【问题讨论】:

    标签: android scrollview fading


    【解决方案1】:

    如果你想要一个与背景不同的褪色边缘,你必须重写 ScrollView 的 getSolidColor() 方法。例如:

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

    【讨论】:

    • 我不知道为什么没有人投票赞成显然是最普遍和最好的​​答案。只需查看 View 的 JavaDoc,它就清楚地说明了这一点。
    • 他是对的,这是在使用背景图像时获得彩色淡入淡出区域的唯一方法。只需扩展 ListView 类。
    • 这个问题的完整课堂解答贴在这里:stackoverflow.com/questions/4050903/…
    • 如果您只使用颜色作为列表视图的背景,Thomas Corner 提到的链接确实提供了一个更简单的解决方案。
    • 这是正确答案。这个答案必须被接受。太棒了
    【解决方案2】:

    只是通过反复试验发现的。

    只需将android:background="@color/yourColor" 设置为<ScrollView>。它将阴影设置为给定的颜色。

    【讨论】:

    • 是的,非常简单。正如您想象的那样,您只需将滚动视图直接子项设置为您想要的背景。谢谢!
    • 根据列表视图的加载时间,这可能看起来很尴尬。 (例如,在列表单元格绘制在顶部之前,listview 会以背景颜色出现)...
    • 最好设置与单元格和列表视图的背景颜色相同的颜色。然后只需将 cachecolorhint 更改为所需的边缘褪色颜色
    【解决方案3】:

    你可以使用:

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

    【讨论】:

    【解决方案4】:

    你可以用这个:

    https://github.com/AndroidAlliance/EdgeEffectOverride

    简单干净,工作完美!

    【讨论】:

    • 据我了解,这并不是真正的解决方案,但我一直在寻找这个。所以谢谢你
    【解决方案5】:

    编辑:这没有回答问题,它要求ScrollView。此答案仅适用于AbsListView 及其后代(包括ListView)。


    淡入淡出的边缘颜色由android:cacheColorHint 属性控制。

    例如:

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

    将背景设置为白色,cacheColorHint 用于绘制褪色边缘颜色——在这种情况下,它将是黑色。

    【讨论】:

    • 我试过这个属性,但它不起作用。看来这个属性/方法只适用于AbsListView
    • 我有这个关于水平滚动视图的问题,上面对 xml 的修改对其有效(至少在模拟器上)。
    • 这适用于我的模拟器 (Android 2.3),但不适用于实际设备 (Motorola Razer Android 2.3.5)。
    • ScrollView 中没有这样的属性!
    【解决方案6】:

    如果您不知道是什么改变了褪色边缘的颜色,那可能是样式或主题的应用。在 Activity 中检查清单中的 android:theme="something"。如果主题来自android.R.style.Theme.Light 组,则边缘将为白色。默认的android.R.style.Themeandroid.R.style.Theme.Black 将有黑色褪色边缘。主题也会影响其他属性,因此在将它们投入其中之前,请全面检查这些属性。

    【讨论】:

    • 我检查了Activity主题,它是@android:style/Theme.NoTitleBar source of which只包含android:windowNoTitle=true。
    • 上面的评论:<!-- Variant of the default (dark) theme with no title bar --> 所以,您使用的是包含黑色褪色边缘的深色主题。你想要Theme.Light.NoTitleBar
    • 我已经改成这个主题了,没有影响褪色边的颜色。
    • 尝试在列表本身上设置样式,以确保它不会在更严格的范围内被覆盖
    【解决方案7】:

    这样做:

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

    在 values\styles 中放置样式

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

    对我有用!

    【讨论】:

      猜你喜欢
      • 2011-09-15
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 2019-03-08
      相关资源
      最近更新 更多