Android小部件按钮自定义对话框

时间:2011-06-16 19:33:24

标签: android button widget

是否可以从小部件按钮打开自定义对话框?我用按钮创建了一个小部件。使用this教程,如果我单击ButtonP1,则会出现一个toast msg。但我想要一个自定义对话框出现。教程中的按钮还有一个意图示例,但对于我的自定义对话框,它无法正常工作,但是如果我想打开一个活动,那就可以了。 我想在用户点击小部件上的按钮时显示自定义对话框。

以下是Main.class是一个活动的代码:

public class HelloWidget extends AppWidgetProvider {

public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    context.startService(new Intent(context, UpdateService.class));

     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widgetmain);
     Intent configIntent = new Intent(context, Main.class);
     configIntent.setAction(ACTION_WIDGET_CONFIGURE);
     PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
     remoteViews.setOnClickPendingIntent(R.id.ButtonP1, configPendingIntent);
     appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
 }

当我将Main.class更改为CustomizeDialog.class时,没有任何反应。

CustomizeDialog.java简而言之:

public class CustomizeDialog extends Dialog implements OnClickListener {
Activity mActivity;
public CustomizeDialog(Activity activity) {
        super(activity);
         mActivity = activity;
...
}
@Override
    public void onClick(View v) {

        if (v == okButton)
        {
            dismiss();
            }
        if (v == cancelButton)
        {
            dismiss();
        }
    }
}

编辑06.21.2011

谢谢你们,我能用framelayout调用一个活动,这几乎就是我想要的。但是,我想用customdialog做这个,但是使用我正在使用的代码,当我点击widget按钮时它不会出现:

Intent configIntent = new Intent(context, CustomizeDialog.class);
     configIntent.setAction(ACTION_WIDGET_CONFIGURE);
     PendingIntent configPendingIntent = PendingIntent.getActivity(context, REQUEST_CODE_THREE, configIntent, 0);
     remoteViews.setOnClickPendingIntent(R.id.ButtonP3, configPendingIntent);

如果我将CustomizeDialog.class更改为Main.class,这是一个活动,它工作正常。

请在上面找到CustomDialog.class的结构。

2 个答案:

答案 0 :(得分:5)

就像Tanner已经指出的那样,你应该使用一个Activity。

在清单中,您必须为对话活动添加一些属性。

android:launchMode =“singleInstance” - 将活动(对话框)放在新任务的根目录下,如果没有此活动,活动将被放置在应用程序的主活动之上。

android:excludeFromRecents =“true” - 所以长按主页键无法访问对话框。

android:theme =“@ android:style / Theme.Dialog” - 将其设置为对话框。

<activity android:name=".InputDialog" 
    android:launchMode="singleInstance"
    android:theme="@android:style/Theme.Dialog"
    android:excludeFromRecents="true">
</activity>

在对话框活动中,您必须在用户单击“确定”,“取消”或“后退”按钮后调用活动上的finish()。如果不这样做,只会关闭对话框,活动仍然可见。

当我遇到同样的问题时,我写了一段时间的回答,可以找到here on my blog.

答案 1 :(得分:1)

执行此操作的一种方法是在通过单击窗口小部件打开的活动中显示对话框。如果您使用类似FrameLayout的内容,则可以投放一个似乎悬停在主屏幕顶部的活动。