【问题标题】:How can I show my activity as a dialog in Android?如何在 Android 中将我的活动显示为对话框?
【发布时间】:2012-01-05 05:55:26
【问题描述】:

我正在开发我的第一个 Android 应用程序,并且正在尝试为我的活动设置样式。最终,我希望我的活动看起来像一个对话。我在AndroidManifest.xml 中使用以下代码为我的所有活动提供了Theme.Dialog 样式:

<application
    android:icon="@drawable/group"
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.Dialog">
</application>

这使我的活动具有“浮动”外观和对话框的边框,但不是样式化的标题。标题只是具有与一般对话框背景相同的颜色和外观,而不是“真实”对话框中的“标题”背景和边框。请注意,在这两个示例中,标题下方都有一个漂亮的边框,而在第二个示例中,它具有渐变背景。

有没有办法确保我的活动标题以某种方式继承系统对话框标题,以便有效地为我的活动复制对话框的外观 - 除了 @987654326 附带的边框和“浮动”之外@风格?

请注意,我不想将我的活动作为另一个对话框来调用,我只是希望它像对话一样LOOK,即使它被加载以作为响应根据我的清单的意图过滤器的意图。

添加: 有没有什么方法可以让我的活动在onCreate() 中旋转时,调用一些方法将自己变成一个实际的对话框?请记住,活动仍然需要能够响应来自系统的意图。

【问题讨论】:

  • 你想要哪个对话框?图片中的第一个或第二个。
  • 它们都是调用标准 show-dialog 方法的结果。第二个是以三星的 TouchWiz UI 为主题的对话框,第一个是以我在 Cyanogenmod 中运行的皮肤为主题的对话框。基本上,我只希望我的活动显示为根据用户设备正在运行的任何主题的对话框,就像我使用 AlertDialog.Builder 一样。

标签: android android-activity dialog


【解决方案1】:

可以通过在styles.xml中将其指定为父主题来自定义对话框主题

<resources>
<style name="MyDialogTheme" parent="android:Theme.Dialog">
            <item name="android:background">#ffdddddd</item>
</style>
</resources>

如果你给自定义对话框样式和布局的背景颜色不同(在你的main.xml文件的布局标题下添加android:background="#ffffffff"),它会给出一个类似外观的系统对话框。

希望这会有所帮助..

没有提到: 请参考清单中的自定义主题,如下所示:

android:theme="@style/MyDialogTheme"

【讨论】:

  • 好吧,我已经在我的活动中使用Theme.Dialog 样式,但它只会给你浮动外观和活动周围的边框。它不设置活动标题栏的样式。我不一定要自定义对话框的外观,我宁愿尝试让我的活动看起来与内在对话框完全一样(但是这可能看起来像用户手机的主题)。
【解决方案2】:

您可以按照以下方式进行操作..

为您的对话框创建一个布局并设置如下。

Dialog mDialog = new Dialog(MainScreen.this,android.R.style.Theme_Translucent_NoTitleBar);

mDialog .requestWindowFeature(Window.FEATURE_NO_TITLE);

mDialog .setContentView(R.layout.dialoglayout);
mDialog .show();

【讨论】:

  • 我需要在另一个活动的代码中添加这个,不是吗?我的活动直接响应启动器意图(在主屏幕上创建的快捷方式),我希望它在系统为这些意图调用时看起来像一个对话框,或者也直接通过启动器。
【解决方案3】:

在决定查看什么我想要做,而不是如何做之后,我找到了一种不同的方法。我重新问了我的问题,寻找方法想法而不是实现想法here。 GalDude33 帮助我弄清楚如何实现我想要的。他的答案就是这个问题的答案。

【讨论】:

  • 当然可以,但是这种方法的问题是,结果没有Activity的属性。例如。您不能在对话框中显示 ActionBar。
  • 我真的承认不能使用 ActionBar 是最大的缺点......而且不得不滚动我自己的相似工具栏。如果您能向我展示一种在获得对话框功能的同时还能使用 ActionBar 的方法,我将非常高兴!
  • 我发现,您可以在 onCreate(...) 方法中更改活动的尺寸,但是我不知道如何使黑色边框半透明,使其看起来像对话框:WindowManager.LayoutParams params = getWindow().getAttributes(); params.height = 300; params.width = 100; getWindow().setGravity(Gravity.CENTER); getWindow().setAttributes(params);
猜你喜欢
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多