Android 显示不以调用活动为背景的DialogFragment
我正在使用Android 显示不以调用活动为背景的DialogFragment,android,android-activity,android-dialogfragment,Android,Android Activity,Android Dialogfragment,我正在使用AlarmManager将PendingEvent传递给我的BroadcastReceiver,时间大约为5分钟。现在,我想向用户显示一个对话框片段,在警报响起时用户可能正在使用的任何应用程序之上。例如,如果警报响起时用户正在使用Chrome,我的DialogFragment应该会在用户的Chrome窗口上方弹出 相反,我得到的结果是,对话框片段以我的应用程序的空白活动为背景显示(如下图所示) 这是我在我的BroadcastReceiver中使用的代码,用于首先启动FragmentA
AlarmManager
将PendingEvent
传递给我的BroadcastReceiver
,时间大约为5分钟。现在,我想向用户显示一个对话框片段
,在警报响起时用户可能正在使用的任何应用程序之上。例如,如果警报响起时用户正在使用Chrome,我的DialogFragment
应该会在用户的Chrome窗口上方弹出
相反,我得到的结果是,对话框片段
以我的应用程序的空白活动为背景显示(如下图所示)
这是我在我的BroadcastReceiver
中使用的代码,用于首先启动FragmentActivity
:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
{
Intent hardReminderIntent = new Intent(context, AlarmHardActivity.class);
hardReminderIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(hardReminderIntent);
}
}
接下来,从这个活动中,我将弹出对话框片段
:
public class AlarmHardActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentManager fm = getSupportFragmentManager();
AlarmHardDialog editNameDialog = new AlarmHardDialog();
editNameDialog.show(fm, "fragment_dialog");
//setContentView(R.layout.activity_alarm_hard);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
//getMenuInflater().inflate(R.menu.activity_alarm_hard, menu);
return true;
}
}
我的问题:
BroadcastReceiver
中的onReceive
调用getSupportFragmentManager
的方法,因此我认为获得对话框的唯一方法是首先调用创建对话框的“虚拟”活动。有更好的方法吗setContentView(..)
,因此不会为其呈现UI。我的理解错了吗?我还尝试调用setContentView(..)
,然后将布局标记为具有主题.NoDisplay
和android:alpha=“0”
,但没有效果任何帮助都将不胜感激。谢谢 如果没有活动,则无法显示此对话框。你可以试着运行你的应用程序,就像你在屏幕截图上所做的那样,但要有透明的背景和隐藏的ActionBar。但我从未尝试过这样做,所以我不确定它是否会起作用。与其在活动上显示对话框,更好的替代方法是使用对话框主题并将所有边的边距设置为所需的dp,使活动看起来像对话框,这样活动就会尖叫到对话框大小 关于几个例子,请看这些帖子: 关于您的问题:
活动
(活动片段
)。因此,是的,您需要虚拟活动
@android:style/theme.transparent.NoTitleBar
,无需调用setContentView。但这个主题与Holo不兼容(在对话框中,您可能会看到旧的Android外观)。我用自定义主题解决了这个问题(我从ICS
使用它,但它应该从蜂巢
工作):
假的
真的
@android:彩色/透明
@空的
真的
@android:风格/动画
完美!正是我需要的。另外,为了确保活动外的点击不会导致活动关闭,我使用了这个问题的答案:干杯!如果我知道为什么我的方法不起作用,我还是会很感兴趣的。。