基于用户输入添加小部件的自定义背景

时间:2010-08-19 19:04:30

标签: android android-widget

我有一个显示一组信息的小部件。我想做的是让用户有机会选择背景颜色/图像。我想在用户选择窗口小部件时选择背景时弹出窗口。

那我怎么做弹出窗口?

我将如何动态应用背景?

感谢您提供任何帮助!!

3 个答案:

答案 0 :(得分:0)

我之前没有这么做过,但我会按照以下方式进行:

  • 如果您要查找系统中已有的文件,请启动选择意图(ACTION_PICK)并提供正确的Intent.data元素
  • 如果您提供以下选项:
    • 创建一个带有列表视图的对话框(图像视图/文本视图(带有复合绘图和一些文本))以选择背景
    • 将返回的值存储到首选项文件
    • 从偏好中读取并应用背景

希望这有帮助

答案 1 :(得分:0)

我认为如果通过点击小部件打开PreferenceActivity可能会更好。 然后选择合适的图片并使用以下内容获取相应的首选项:

String background = prefs.getString("background", "bgpink"); // get the Prefs!
RemoteViews views = new RemoteViews(this.getPackageName(), R.layout.widget);

if (background.equals("bgpink")) {
    views.setImageViewResource(R.id.widgetLayout, R.drawable.bgpink); // set the background
}

setBackground代码不起作用。我阅读了“setImageViewResource”的文档,我认为这是一个悬而未决的问题。如果您找到了设置背景的解决方案,请与我们联系。

答案 2 :(得分:0)

我最终使用的是:

    public static void setWidgetBackground(Context context, AppWidgetManager appWidgetManager, int mAppWidgetId, int newBackground){
            // theLayout is a global int in my case

            switch (newBackground){
            case R.id.brown:
                theLayout = R.layout.brown_widget;
                break;
        case R.id.darkblue:
            theLayout = R.layout.darkblue_widget;
                break;
            case R.id.darkpurple:
                theLayout = R.layout.darkpurple_widget;
                break;
            // ... etc.
            }


            // save the settings so we can load and apply again next time the widget is updated
            WidgetConfigure.saveLayout(context,mAppWidgetId,theLayout);

            // call the actual update so that the right background is applied
            this.updateAppWidget(context, appWidgetManager, mAppWidgetId, theLayout);

    }

希望这对其他人有帮助。