显示 DialogFragment,而不将调用 Activity 作为背景

Pri*_*raj 3 android android-activity android-dialogfragment

我正在使用 来AlarmManager将 a 传递PendingIntent给我的BroadcastReceiver5 分钟后。现在,我想DialogFragment向用户显示一个,位于警报响起时用户可能使用的任何应用程序之上。例如,如果用户在闹钟响起时正在使用 Chrome,则我的DialogFragment窗口应该在用户的 Chrome 窗口上方弹出。

我最终得到的是以DialogFragment我的应用程序的空白活动作为背景显示(如下图所示)

https://i.stack.imgur.com/Vz9IZ.png

这是我在我的 中使用的代码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);

        }
}
Run Code Online (Sandbox Code Playgroud)

接下来,从这个活动中,我弹出DialogFragment

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 我找不到getSupportFragmentManager直接从onReceivemy 中调用的方法BroadcastReceiver,因此假设获取对话框的唯一方法是首先调用创建对话框的“虚拟”活动。有一个更好的方法吗?

  2. 不管我的方法是否正确,我预计由于没有调用setContentView(..)AlarmHardActivity,因此不会为其呈现 UI。我的理解有错吗?我还尝试调用setContentView(..)然后将布局标记为具有Theme.NoDisplayandroid:alpha="0",但无济于事。

任何帮助都感激不尽。谢谢!

Sou*_*rma 5

更好的选择不是在活动上显示对话框,而是通过使用对话框主题并将所有边的边距设置为所需的 dp 来使活动看起来像对话框,以便活动被称为对话框大小。

有关几个示例,请查看这些帖子: Android Activity as a dial

Android:如何创建透明的对话框主题活动

如何将对话框主题活动宽度设置为屏幕宽度?