gpt4 book ai didi

android - 从 widgetprovider 更改按钮的背景可绘制颜色

转载 作者:行者123 更新时间:2023-11-29 15:21:04 25 4
gpt4 key购买 nike

在任何 Activity 的正常 Android 代码中,我可以控制可绘制背景的颜色

Drawable d = findViewById(R.id.button_highlight).getBackground();  
PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
d.setColorFilter(filter);

我想知道如何在 WidgetProvider 中利用它来动态更改元素背景可绘制对象的背景颜色

在我的 AppWidgetProvider 实例中,我想调用如下内容:

int color2 = settings.getInt("secondary_color", R.color.main_alt);
// following won't work because a <Button> has no method "setColorFilter"
remoteViews.setInt(R.id.button_highlight,"setColorFilter",color2);

id 为 R.id.highlight 的按钮的 button_bg.xml 可绘制对象如下所示:

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

<corners android:topRightRadius="5dp" android:bottomRightRadius="5dp"/>
<solid android:color="@color/main_alt"/>
<padding android:bottom="5dp" android:left="5dp" android:right="5dp" android:top="5dp"/>

</shape>
</item>

<item>
<shape>

<corners android:topRightRadius="5dp" android:bottomRightRadius="5dp"/>
<solid android:color="@color/main"/>
<padding android:bottom="5dp" android:left="5dp" android:right="5dp" android:top="5dp"/>

</shape>
</item>
</selector>

有什么解决方法吗?我错过了什么吗?如何更改背景可绘制对象的颜色?我正在考虑子类化 Button 并实现自定义方法来设置颜色,但我首先想知道是否有更常见或更简单的方法..

最佳答案

setColorFilter(int color, PorterDuff.Mode mode) 没有@RemotableViewMethod 注释,因此不能在 RemoteViews 中使用。

我最好的选择是将可绘制对象转换为位图,然后使用 RemoteViews.setImageBitmap():http://developer.android.com/reference/android/widget/RemoteViews.html#setImageViewBitmap(int, android.graphics.Bitmap)我还没有实际测试过,但值得一试。我发现有些方法在远程 View 中不起作用,即使它们具有 @RemotableViewMethod 注释,因此它可能会或可能不会起作用。

您将在 SO 上找到有关如何将 Drawable 转换为位图的答案,例如这里: https://stackoverflow.com/a/9390776/534471

关于android - 从 widgetprovider 更改按钮的背景可绘制颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18107991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com