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

erd*_*ter 2 android widget button

是否可以从小部件按钮打开自定义对话框?我用按钮创建了一个小部件.在教程中,如果我单击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);
 }
Run Code Online (Sandbox Code Playgroud)

当我将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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑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);
Run Code Online (Sandbox Code Playgroud)

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

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

roc*_*dev 5

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

在清单中,您必须向对话框活动添加一些属性.

android:launchMode ="singleInstance" - 将活动(对话框)放在新任务的根目录下,如果没有这个,活动将被置于应用程序的主要活动之上.

android:excludeFromRecents ="true" - 所以你不能通过长按home键来到达对话框.

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

<activity android:name=".InputDialog" 
    android:launchMode="singleInstance"
    android:theme="@android:style/Theme.Dialog"
    android:excludeFromRecents="true">
</activity>
Run Code Online (Sandbox Code Playgroud)

在对话框活动中,您必须在用户单击"确定","取消"或"后退"按钮后调用活动上的finish().如果不这样做,则仅关闭对话框并且活动将保持可见.

当我遇到同样的问题时,我写了一段时间的回答,可以在我的博客上找到.