【问题标题】:Change the Color of ScrollView Programmatically以编程方式更改 ScrollView 的颜色
【发布时间】:2014-02-16 03:16:54
【问题描述】:

我目前在做什么

目前,我已经使用 android:scrollbarThumbVertical 属性更改了我的 XML 文件中的滚动条,如下所示:

<ScrollView
    android:id="@+id/scrollView1"
    android:scrollbarThumbVertical="@drawable/scrollbar_blue"
    ... >

scrollbar_blue 指的是我的scrollbar_blue.xml 文件,即:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <gradient
        android:angle="45"
        android:centerColor="@color/blue"
        android:endColor="@color/blue"
        android:startColor="@color/blue" />

    <corners android:radius="8dp" />
</shape>

我想做什么

我的应用有一个颜色选项 - 所以当颜色打开时,它应该保持蓝色;否则,它应该是灰色的。

如何以编程方式(在我的活动类中)更改我的 ScrollView 以使用我的 scrollbar_grey.xml

如果你看ScrollView上的Android文档,没有android:scrollbarThumbVertical对应的方法

我也可以用另一种方式更改颜色。

这是我创建对 ScrollView 的引用的方法:

ScrollView scr = (ScrollView)findViewById(R.id.scrollView1);

【问题讨论】:

  • 试试这个 scr.setBackgroundResource(R.drawable.yourstylexml)
  • @mohammedmomn 这不会改变 scrollbar 的颜色,它会改变整个 scrollview 的颜色。感谢您尝试一些东西。

标签: android android-xml android-scrollview


【解决方案1】:

有一种以编程方式更改它的方法,但该方法未公开。似乎没有其他任何东西可以从我读过的内容中以编程方式改变它。

但是,我确实遇到了这个使用反射来完成的 stackoverflow 答案。 如果它适合你,请在那里投票:https://stackoverflow.com/a/19819843/3286163

答案是列表视图,但滚动视图是一样的:

ScrollView scr = (ScrollView)findViewById(R.id.scrollView1);
try
{
    Field mScrollCacheField = View.class.getDeclaredField("mScrollCache");
    mScrollCacheField.setAccessible(true);
    Object mScrollCache = mScrollCacheField.get(scr); // scr is your Scroll View

    Field scrollBarField = mScrollCache.getClass().getDeclaredField("scrollBar");
    scrollBarField.setAccessible(true);
    Object scrollBar = scrollBarField.get(mScrollCache);

    Method method = scrollBar.getClass().getDeclaredMethod("setVerticalThumbDrawable", Drawable.class);
    method.setAccessible(true);

    // Set your drawable here.
    method.invoke(scrollBar, getResources().getDrawable(R.drawable.scrollbar_blue));
}
catch(Exception e)
{
    e.printStackTrace();
}

只有我能找到的东西。我自己试了一下,效果很好。

【讨论】:

  • 很好的答案(尤其是来源)!旁注:Android 没有明确的方法,这太荒谬了。
【解决方案2】:

在 API 29+ 中使用 ScrollView.setVerticalScrollbarThumbDrawable() 否则使用接受的答案。

【讨论】:

    【解决方案3】:

    现在很容易:)

    scrollView.verticalScrollbarThumbDrawable = ColorDrawable(Color.CYAN)
    scrollView.horizontalScrollbarThumbDrawable = ColorDrawable(Color.WHITE)
    

    【讨论】:

    • 是的,它需要最低 API 29
    猜你喜欢
    • 2015-12-06
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多