我使用AlarmManager
将PendingIntent
传递给我的BroadcastReceiver
,比如5分钟后。现在,我希望向用户显示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;
}
}
我的问题:
我找不到直接从我getSupportFragmentManager
中的onReceive
拨打BroadcastReceiver
的方法,因此认为获得对话的唯一方法是首先调用一个'虚拟'活动,创建对话框。有更好的方法吗?
无论我的方法是否正确,我都预计,由于AlarmHardActivity中没有调用setContentView(..)
,因此不会为其呈现UI。我的理解错了吗?我还尝试调用setContentView(..)
,然后将布局标记为Theme.NoDisplay
和android:alpha="0"
,但无济于事。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:4)
除了在活动上显示对话框之外,更好的选择是通过使用对话框主题并将所有边的边距设置为所需的dp,使活动看起来像对话框,以便活动变得尖叫到对话框大小。
举几个例子来看看这些帖子: Android Activity as a dialog
答案 1 :(得分:3)
问题:
碎片只能附加到Activity
(ActivityFragment
)。所以是的,你需要虚拟Activity
。
使用不可见的主题@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>
答案 2 :(得分:0)
如果没有Activity,则无法显示此对话框。您可以尝试像在屏幕截图上一样运行您的应用,但具有透明背景和隐藏的ActionBar。但我从来没有试过这样做,所以我不确定它是否会起作用。