将AppCompatActivity作为无标题对话框

64

我有一个继承自AppCompatActiviyActivity。在清单文件中为活动设置主题:

<style name="Theme.custom" parent="Theme.AppCompat.Light.Dialog">
    <item name="android:windowNoTitle">true</item>
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
    <item name="colorButtonNormal">@color/accent</item>
    <item name="android:buttonStyle">@style/ButtonStyle</item>
</style>
当我运行活动时,它显示为对话框,但标题没有显示!我尝试使用supportRequestWindowFeature(Window.FEATURE_NO_TITLE)requestWindowFeature(Window.FEATURE_NO_TITLE),但标题仍然会显示。请告诉我出了什么问题?
编辑
我解决了它,只需将android:windowNoTitle更改为windowNoTitle!因为我使用的是AppCompactActvity!

这也发生在我的设备上。即使我将工具栏设置为操作栏,它仍然存在。对我来说似乎是某种错误。您可以将标题字符串设置为空字符串,但它仍然存在,因此会影响居中对齐。 - Jimeux
8
将您的编辑作为答案发布并接受它,我在编辑中差点错过这个 :) - RyanJohnstone
2
在我的情况下,支持“supportRequestWindowFeature(Window.FEATURE_NO_TITLE)”是有效的。当这是活动的onCreate()方法中的第一个语句时。 - harsh_v
1
@Harsh 我认为你的答案是正确的解决方案。 - Xavier.S
6个回答

107
如果您使用的是AppCompatActivity,则以下内容将不起作用。
简单的方法是在style.xml文件中设置它。
<style name="mytheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="windowNoTitle">true</item>
</style>

应该是 name="windowNoTitle",而不是 name="android:windowNoTitle"

如果你想在程序中动态地移除标题栏,可以在 onCreate() 方法中添加以下代码

getSupportActionBar().hide();

6
注意,应该使用 "windowNoTitle" 而不是 "android:windowNoTitle"。 - M. Usman Khan
1
它的名称是"name=windowNoTitle",而不是"name=android:windowNoTitle"。谢谢兄弟。 - Ali Zarei

7

AppCompatActivity与Activity不同,具有自己的特点。为了实现同样的目的,您可以简单地使用-

supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

你可以在这里查阅文档:这里 注意:在调用 setContentView() 之前添加此代码可避免崩溃。

1
在您的style.xml文件中设置以下样式。
<style name="customDialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="windowNoTitle">true</item>
</style>

然后在您的活动中设置此主题。
<activity
    android:name=".yourDailogActivity"
    android:configChanges="orientation"
    **android:theme="@style/customDialogTheme"**
    android:screenOrientation="portrait" />

0

应该不要在活动标题上方放置任何内容。如果按照这些步骤进行操作,活动标题将被隐藏。

style.xml:

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

manifiest.xml:

 <activity
            android:name="YouActivity" 
            android:theme="@style/MyTitledActivityDialogTheme" />

YourClass.java:

setContentView(R.layout.xyz) 之后添加以下代码

  setContentView(R.layout.xyz);
  if (getSupportActionBar() != null)
      getSupportActionBar().hide();

-2
请在setContentView()之前使用请求窗口功能,如下所示。
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);

-4

应该保留在<string name="app_name"></string>之外的任何内容。这样,当您运行活动时,它将显示一个带有“无标题”的对话框。

string.xml:

         <resources>
               <string name="app_name"></string>
               <string name="hello_world">Hello world!</string>
               <string name="action_settings">Settings</string>
        </resources>

据我所知,默认标题是活动的标签(通常指app_name),但仅使用空字符串作为活动标签并不是一个好的解决方案。 - Felix Edelmann

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