1

我正在尝试在主屏幕上开发自己的模拟时钟小部件。它基于库存的 ICS 模拟时钟小部件,但当添加到主屏幕时,我的小部件首先会打开一个配置屏幕。

小部件配置屏幕截图

在此屏幕上,您可以选择时钟的颜色(通过颜色选择器对话框)。您还可以在此屏幕上看到所选颜色的时钟预览。(见图)。我的问题是将主屏幕上小部件的颜色更改为所选颜色(当您点击应用按钮时)。我有三个用于表盘、时针和分针的 .png 文件。我在我的 widgetconfig 类中使用此代码为它们着色:

    Drawable dial = getResources().getDrawable(R.drawable.clockbackground);
    dial.setColorFilter(color, PorterDuff.Mode.MULTIPLY);
    //hour
    Drawable hour = getResources().getDrawable(R.drawable.hourhand);
    hour.setColorFilter(color, PorterDuff.Mode.MULTIPLY);
    //minute
    Drawable min = getResources().getDrawable(R.drawable.minutehand);
    min.setColorFilter(color, PorterDuff.Mode.MULTIPLY);
    // clock
    AnalogClock clockpreview = (AnalogClock) findViewById(R.id.ACconfig);
    clockpreview.setBackgroundDrawable(dial);

这很好用,因为我可以找到 AnalogClock,因为它位于配置屏幕的布局 xml 文件中,我通过 setContentView() 在 OnCreate() 中设置了该文件。问题是对于我屏幕上的时钟小部件,我必须使用 RemoteViews。所以我尝试通过 RemoteViews 设置时钟小部件的新背景。但是 RemoteViews 似乎太有限了,无法做到这一点。我需要 setTextViewText() 之类的东西,但是对于我的模拟时钟小部件的背景,例如:

    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.clockwidget);
    views.setAnalogClockBackgroundDrawable(dial);

时钟小部件背景似乎是不可改变的。如何在 widgetconfig 类的主屏幕上重新着色我的时钟小部件?一定有办法,因为一开始似乎很容易做到……

我的项目由小部件配置类和clockwidget 类、widgetconfig.xml、clockwidget.xml 和widget_info.xml(用于appwidgetprovider)组成。

4

0 回答 0