动态地将视图添加到Android小部件

时间:2011-06-12 02:54:16

标签: android android-widget

我在运行时以编程方式创建视图,我希望在运行时动态地将此视图添加到我的linearlayout中。这是我得到的代码:

public class Widget extends AppWidgetProvider {

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        RemoteViews updateViews = new RemoteViews(context.getPackageName(),
                R.layout.main);

        DemoView dv = new DemoView(context);

            // Stuck here...How do I add my new dv View to my android widget

        appWidgetManager.updateAppWidget(appWidgetIds, updateViews);
        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }


     private class DemoView extends View {
        public DemoView(Context context) {
            super(context);


        }

        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);

            Paint LedColor = new Paint();
            Paint BlankColor = new Paint();
            Path p,p1;
            Matrix m = new Matrix();

            LedColor.setStyle(Paint.Style.FILL);
            LedColor.setColor(0xffffffff);

            BlankColor.setStyle(Paint.Style.FILL);
            BlankColor.setColor(0xff111111);

            DigitPaths dp = new DigitPaths();

            p = dp.GetDigitPath(-1);
            p1 = dp.GetDigitPath(5);

            p.offset(50, 50);
            p1.offset(50, 50);

            m.setScale(6.5f, 6.5f);
            p.transform(m);
            p1.transform(m);
            canvas.drawPath(p,BlankColor);
            canvas.drawPath(p1, LedColor);
        }
    }
}

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:6)

无法向应用小部件添加自定义View。有关允许View类型的信息,请参阅“App Widgets开发指南”的the "Creating the App Widget Layout" section

Android 3.0增加了对某些视图的支持以显示集合。有关详细信息,请参阅the "Using App Widgets with Collections"部分。

否则,要向App Widget动态添加允许的View,在对RemoteViews进行充气并获取对它的引用后,您可以使用其addView(View)方法或{{在addView(View)

中已有的任何View个对象的方法

答案 1 :(得分:2)

正如布鲁斯正确回答的那样,无法使用自定义视图。由于您的视图似乎没有响应输入,只是绘制,您可以使用ImageView实现相同的功能。只需创建一个Bitmap,用它创建一个Canvas,然后使用你的onDraw代码绘制它。然后创建一个ImageView(在小部件中允许)并将其显示的图像设置为您的位图。