首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更改小工具中的ProgressBar颜色?

如何更改小工具中的ProgressBar颜色?
EN

Stack Overflow用户
提问于 2015-01-25 21:31:00
回答 4查看 1.4K关注 0票数 4

有没有办法在运行时更改应用程序小部件中ProgressBar的颜色?

下面是ProgressBar进度值的更新方式:

代码语言:javascript
运行
复制
RemoteViews views = new RemoteViews( context.getPackageName(), R.layout.widget );
views.setProgressBar( R.id.progressbar, 100, 10, false );
...
appWidgetManager.updateAppWidget( widgetID, views );

不幸的是,RemoteViews类不允许我们为ProgressBar设置滤色器,甚至不允许绘制不同的进度。

任何想法都将不胜感激。

EN

回答 4

Stack Overflow用户

发布于 2018-12-26 17:58:19

我在自定义通知布局中遇到过类似的tint ProgressBar问题。我已经设法使用反射API做到了这一点:

代码语言:javascript
运行
复制
    Method setTintMethod = null;
    try {
        setTintMethod = RemoteViews.class.getMethod("setProgressTintList", int.class, ColorStateList.class);
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    }
    if (setTintMethod != null) {
        try {
            setTintMethod.invoke(mYourRemoteViews, R.id.your_progress_bar_id, ColorStateList.valueOf(yourColor));
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
票数 4
EN

Stack Overflow用户

发布于 2015-01-25 21:40:26

在ProgressBar XML中添加以下行:

代码语言:javascript
运行
复制
android:progressDrawable="@drawable/progressbar"

现在创建progressbar.xml可绘制文件:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
    <shape>
        <corners android:radius="5dip" />
        <gradient
                android:startColor="#ff9d9e9d"
                android:centerColor="#ff5a5d5a"
                android:centerY="0.75"
                android:endColor="#ff747674"
                android:angle="270"
        />
    </shape>
</item>

<item android:id="@android:id/secondaryProgress">
    <clip>
        <shape>
            <corners android:radius="5dip" />
            <gradient
                    android:startColor="#80ffd300"
                    android:centerColor="#80ffb600"
                    android:centerY="0.75"
                    android:endColor="#a0ffcb00"
                    android:angle="270"
            />
        </shape>
    </clip>
</item>
<item
    android:id="@android:id/progress"
>
    <clip>
        <shape>
            <corners
                android:radius="5dip" />
            <gradient
                android:startColor="#33FF33"
                android:endColor="#008000"
                android:angle="270" />
        </shape>
    </clip>
</item>

</layer-list>

请参阅参考:Android change Horizonal Progress bar color

票数 0
EN

Stack Overflow用户

发布于 2019-10-29 20:33:14

例如,您的progressDrawable (layer-list)具有:

  • @android:id/background - solid color
  • @android:id/progress -应更新programatically

你可以使用这个技巧:

  1. 而不是进度图层您可以在progressBar后面创建颜色,并使用setInt(id,"setColorFilter",ImageView )更新颜色
  2. 将android:rotation="180“添加到xml文件中的progressBar
  3. 如果不设置进度值,您应该设置"max - progress”值
  4. 现在progressBar用作背景

<代码>G215

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28136963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档