我正在使用ActionBarSherlock (ABS),并想在我的应用程序中添加一个对话框,正如项目提供的ABS Demos Sample应用程序中所看到的那样。对话框示例如下所示:
我自己创建了一个活动。这是相关的源代码:
public class Dialog extends SherlockActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Sherlock___Theme_DarkActionBar);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
}
}
setTheme()
出于某种原因,尽管 ABS 示例没有这样做,但Android 强制我添加。如果我忽略它,我将遇到以下错误。
java.lang.IllegalStateException: You must use Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar, or a derivative.
MyAndroidManifest.xml
具有以下设置,与 ABS 示例中的设置非常相似。
<activity
android:name=".activities.Dialog"
android:label="@string/title_activity_dialog"
android:theme="@style/Theme.Sherlock.Dialog" >
</activity>
以下屏幕截图显示了我的对话活动的样子。
我正在使用带有地图支持的 ActionBarSherlock 4.1.0,Android 支持库 v4。
问题:你能弄清楚为什么它看起来如此不同吗?
- 深色与浅色用户界面
- 透明与不透明背景
- 有和没有操作栏
更新:
ABS 示例按如下方式启动对话活动:
protected void onListItemClick(ListView l, View v, int position, long id) {
Map<String, Object> map = (Map<String, Object>)l.getItemAtPosition(position);
Intent intent = (Intent) map.get("intent");
startActivity(intent);
}
我按如下方式启动对话活动:
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(R.string.title_menuItemDialogActivtiy)
.setIcon(R.drawable.ic_action_dialog)
.setIntent(new Intent(this, Dialog.class))
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
return true;
}
同时,我看到这种模式已被弃用。相反,我可以使用DialogFragment。这里出现的问题:如何将片段与操作菜单项集成?
替代解决方案:
我决定使用 aDialogFragment
而不是 anActivity
因为我估计它更“未来安全”。我基本上遵循了内容非常丰富的教程Using DialogFragments(2012 年 6 月 3 日发布),我喜欢将其推荐为任何感兴趣的读者的完美起点。此外,我喜欢添加相关且有用的帖子: