Android活动作为对话框,但没有标题栏。

77

我有一个活动,其主题设置如下:

android:theme="@android:style/Theme.Dialog"

然而,在活动对话框中出现了一个标题栏,占用了我所拥有的很少的可用空间。我该如何去掉它?


1
我不确定你的意思。你能发一张截图吗? - Lukas Knuth
9个回答

146
尝试在onCreate中调用requestWindowFeature(Window.FEATURE_NO_TITLE);。它需要在调用super.onCreate之后立即完成,而且要在调用setContentView之前完成。

1
你尝试过在2.2版本上运行吗?我遇到了一个Caused by: android.util.AndroidRuntimeException: You cannot combine custom titles with other title features的异常,但也许是我做错了其他事情。 - Eleni
你可能在代码中使用了另一个窗口标题功能,或者使用了其他对标题进行操作的主题。 - Femi
16
这在AppCompactActivity中不起作用。您应该添加@zackygaurav的答案,以便使用AppCompatActivity的用户可以获得正确的信息。 - Moinkhan
@Moinkhan 那对于 'AppCompactActivity' 它会如何工作呢? - Yousuf Sohail

145

对于使用AppCompatActivity的人,上述答案可能无法起作用。

尝试这个

supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.MyDialogActivity);之前立即执行。


10
<item name="windowNoTitle">true</item>添加到您的样式中,即无需使用android前缀。 - Rehan
1
还有一件事:不要在布局或活动的根部使用ConstraintLayout,否则您的活动将无法显示在屏幕上。 - Van

114
您可以定义自己的主题:
<style name="NoTitleDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowNoTitle">true</item>
</style>

(向@Rehan致敬)如果您正在使用兼容性库,应选择一个AppCompat父主题,并省略android:前缀。例如:

<style name="NoTitleDialog" parent="@style/Theme.AppCompat.Dialog">
    <item name="windowNoTitle">true</item>
</style>

4
谢谢这个。这可能是更好的方法,但我最终使用了requestWindowFeature。无论如何,还是谢谢 :) - Shade
7
补充一下:在使用AppCompatActivity时,无需添加android前缀,即可将<item name="windowNoTitle">true</item>添加到你的样式中。请注意保持原意,使内容更加通俗易懂。 - Rehan
我在许多资源中发现了很好的概念,但没有一个谈论AppCompat和非AppCompat,谢谢。 - Somwang Souksavatd

30

如果你在使用AppCompatActivity,它强制你为所有内容使用Theme.AppCompat.xxx,那么你可以在styles.xml中使用以下代码来移除对话框标题或操作栏:

<style name="Theme.MyDialog" parent="Theme.AppCompat.Light.Dialog">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

请注意使用 name="windowActionBar" 而不是 name="android:windowActionBar"

我曾经无助地尝试使用AppCompat和在windowNoTitle声明中使用android命名空间。谢谢! - romulof

6

这个方法对我有效。

我成功地禁用了标题。

style.xml

<style name="AppDialogScreenTheme" parent="Base.Theme.MaterialComponents.Light.Dialog">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

AndroidManifest.xml

  <activity
        android:name=".MyActivity"
        android:theme="@style/AppDialogScreenTheme">

  </activity>

5

如果您正在使用AppCompatActivity,则requestWindowFeature(Window.FEATURE_NO_TITLE)无效。

为此,您可以在values/style.xml中创建自定义主题,如下所示:

   <style name="NoTitleDialog" parent="Theme.AppCompat.Dialog.Alert">
        <item name="windowNoTitle">true</item>
    </style>

请注意,项名称为“windowNoTitle”,并非“android:windowNoTitle”。在manifest.xml中应用此自定义主题:
<activity android:name=".activity.YourActivity"
            android:theme="@style/NoTitleDialog"/>

或者您可以使用 getSupportActionBar().hide() 来编程隐藏操作栏。


5
这个对于我的应用兼容性(appcompat)有效。
<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

0

我尝试使用requestWindowFeature(Window.FEATURE_NO_TITLE);但对我无效,如果你和我一样,请按照以下步骤操作: 首先,在res/values/styles.xml中添加以下代码:

<style name="NoTitleDialog" parent="Theme.AppCompat.Dialog">
   <item name="android:windowNoTitle">true</item></style>

将主题传递给您的对话框:
Dialog dialog = new Dialog(this, R.style.NoTitleDialog);

这很简单


0

这对我有用,希望能帮到其他人:

style.xml

<style name="NoTitleActivityDialog" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="windowNoTitle">true</item>
</style>

AndroidManifest.xml

   <activity
        android:name=".DialogActivity"
        android:theme="@style/NoTitleActivityDialog"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接