如何解决Android RemoteView 以编程方式设置 StateListDrawable
我有一个适用于我的 Android 应用的小部件。在这个小部件上有一个按钮。用户可以自由选择按钮的颜色。所以我还必须动态设置不同按钮状态的颜色。
通常,我会这样做:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/colorButtonRedTransparentPressed"
android:state_pressed="true" />
<item android:drawable="@color/colorButtonRedTransparentPressed"
android:state_focused="true" />
<item android:drawable="@color/colorButtonRedTransparentNotPressed" />
</selector>
如前所述,我必须动态执行此操作,因为用户可以自由选择颜色:
StateListDrawable drawable = new StateListDrawable();
drawable.addState(new int[] {},new ColorDrawable(Color.parseColor(customButton.getColorHex())));
drawable.addState(new int[] { android.R.attr.state_pressed },new ColorDrawable(Color.parseColor("#0000")));
挑战:
按钮位于小部件上。所以我不能简单地调用:
myButton.setBackground(drawable);
我需要这样调用:
remoteView.setInt(R.id.button_fixedvalue,"setBackground",drawable)
但是该函数需要一个整数,而我没有。
有人有不同的方法吗?
解决方法
选项 1
如果用户可以选择的颜色数量有限,您可以为每个颜色选项创建一个选择器资源,然后使用 `setInt()` 方法分配与所选颜色对应的资源 ID。选项 2
如果“自由选择”意味着用户可以选择任何可能的颜色 - 或者至少从非常大的数量中选择 - 选项 1 当然不起作用。 根据您的 drawable 的确切外观,您可以试试这个:- 仅创建一个选择器资源。
- 为您的按钮使用
ImageView
。 - 使用
ImageView
方法将颜色作为色调应用于ImageView.setColorFilter()
。 看起来像这样:
remoteView.setInt(R.id.button_id,"setColorFilter",Color.parseColor("#0000"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。