Изменение цвета ScrollView Programmatically - программирование
Подтвердить что ты не робот

Изменение цвета ScrollView Programmatically

Что я сейчас делаю

В настоящее время я изменил полосу прокрутки в своем XML файле, используя свойство android:scrollbarThumbVertical:

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

Если вы посмотрите на документацию по Android на ScrollView, нет соответствующего метода для android:scrollbarThumbVertical

Я в порядке с другим изменением цвета.

Вот как я создаю ссылку на свой ScrollView:

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

Ответ 1

Существует метод его программного изменения, но этот метод не отображается. Кажется, что нет ничего, что могло бы изменить его программным образом из того, что я прочитал.

Однако, я столкнулся с этим одним ответом stackoverflow, который использует отражение, чтобы сделать это. Пожалуйста, поддержите ответ там, если он сработает для вас: fooobar.com/info/478642/...

Ответ был для списка, но тот же для прокрутки:

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

Единственное, что я мог найти. Я попробовал сам, и это сработало.