3

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

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

http://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);

        }
}

接下来,从这个活动中,我弹出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;
    }

}

我的问题:

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

  2. 无论我的方法是否正确,我都希望由于setContentView(..)在 AlarmHardActivity 中没有调用,因此不会为它呈现 UI。我的理解错了吗?我也尝试调用setContentView(..)然后将布局标记为具有Theme.NoDisplayand android:alpha="0",但无济于事。

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

4

3 回答 3

5

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

举几个例子看看这些帖子: Android Activity as a dialog

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

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

于 2013-02-04T13:51:01.387 回答
3

对于您的问题:

  1. 片段只能附加到Activity( ActivityFragment)。所以,是的,你需要假人Activity

  2. 使用隐形主题@android:style/Theme.Translucent.NoTitleBar,不需要调用 setContentView。但是这个主题不兼容 Holo(在对话框中你会有旧的 Android 外观)。我用自定义主题解决了这个问题(我使用这个ICS,但它应该可以工作HONEYCOMB):

<style name="InvisibleTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>

    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <!-- Note that we use the base animation style here (that is no animations) because we really have no idea how this kind of activity will be used. -->
    <item name="android:windowAnimationStyle">@android:style/Animation</item>
</style>
于 2013-04-18T16:54:37.167 回答
0

没有 Activity 是不可能显示这个对话框的。您可以尝试像在屏幕截图中一样运行您的应用程序,但要使用透明背景和隐藏的 ActionBar。但我从未尝试过这样做,所以我不确定它是否会起作用。

于 2013-02-04T11:28:48.030 回答