Android-Aktivität als Dialog, jedoch ohne Titelleiste


72

Ich habe eine Aktivität mit folgendem Thema:

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

Es erscheint jedoch eine Titelleiste im Aktivitätsdialog, die den wenig verfügbaren Speicherplatz belegt. Wie kann ich es entfernen?


1
Ich bin mir nicht sicher was du meinst. Kannst du einen Screenshot davon posten?
— Lukas Knuth

Antworten:


145

Versuchen Sie , requestWindowFeature(Window.FEATURE_NO_TITLE);in onCreate. Dies muss unmittelbar nach dem Anruf super.onCreateund kurz zuvor erfolgen setContentView.


1
Haben Sie dies mit 2.2 versucht? Ich bekomme eine Caused by: android.util.AndroidRuntimeException: You cannot combine custom titles with other title featuresAusnahme, aber vielleicht mache ich etwas anderes falsch.
— Eleni

Sie verwenden wahrscheinlich eine andere Fenstertitelfunktion im Code oder ein Thema, das andere Dinge mit dem Titel tut.
— Femi

14
Das wird nicht funktionieren AppCompactActivity. Sie sollten die Antwort @zackygaurav hinzufügen, damit der Benutzer, der die verwendet AppCompatActivity, die richtigen Informationen erhält.
— Moinkhan

@ Moinkhan, wie würde es für 'AppCompactActivity' funktionieren?
— Yousuf Sohail

131

Für diejenigen, die verwenden AppCompatActivity, funktionieren die obigen Antworten möglicherweise nicht.

Versuche dies

supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

unmittelbar bevor setContentView(R.layout.MyDialogActivity);


6
Genius! Vielen Dank!
— Murphybro2

7
Oder fügen Sie <item name="windowNoTitle">true</item>Ihrem Stil hinzu, dh ohne das Android- Präfix
— Rehan

1
Nur noch eine Sache: Nicht ConstraintLayoutim Stammverzeichnis Ihres Layouts verwenden, da Ihre Aktivität sonst nicht auf dem Bildschirm angezeigt wird.
— Van

111

Sie können Ihr eigenes Thema definieren:

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

(Tipp des Hutes an @Rehan) Wenn Sie die Kompatibilitätsbibliothek verwenden, sollten Sie ein AppCompatübergeordnetes Thema auswählen und das android:Präfix weglassen . Zum Beispiel:

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

4
Danke dafür. Es ist wahrscheinlich ein besserer Ansatz, aber am Ende habe ich requestWindowFeature verwendet. Trotzdem danke :)
— Schatten

7
Einfach hinzufügen: Verwenden Sie es ohne Android- Präfix, AppCompatActivityum <item name="windowNoTitle">true</item>es Ihrem Stil hinzuzufügen .
— Rehan

Ich habe in vielen Quellen ein gutes Konzept gefunden, aber keiner von ihnen spricht über AppCompat und keinen Appcompat, danke
— Somwang Souksavatd

30

Wenn Sie verwenden, AppCompatActivityin dem Sie Theme.AppCompat.xxxfür alles verwendet werden müssen, können Sie den Dialogtitel oder die Aktionsleiste entfernen, styles.xmlindem Sie Folgendes verwenden:

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

Beachten Sie die Verwendung von name="windowActionBar"anstelle von name="android:windowActionBar".


Ich habe hilflos versucht, AppCompat UND den Android-Namespace in der windowNoTitle-Deklaration zu verwenden. VIELEN DANK!
— Romulof

7

Wenn Sie AppCompatActivity verwenden, funktioniert requestWindowFeature (Window.FEATURE_NO_TITLE) nicht.

Dazu können Sie ein benutzerdefiniertes Thema in values ​​/ style.xml wie folgt erstellen:

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

Bitte beachten Sie, dass der Artikelname: "windowNoTitle" nicht der Artikelname: "android: windowNoTitle"

Wenden Sie in menifest.xml dieses benutzerdefinierte Thema als an

<activity android:name=".activity.YourActivity"
            android:theme="@style/NoTitleDialog"/>

Oder Sie können getSupportActionBar (). hide () verwenden , um die Aktionsleiste programmgesteuert auszublenden.


5

Dieser arbeitete für mich für 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>

2

Dieser hat für mich gearbeitet.

Ich konnte den Titel deaktivieren

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>

1

Für Dialoge können Sie Folgendes tun:

Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

4
Die Frage bezieht sich auf eine Aktivität, die als Dialog und nicht als Dialog angezeigt wird.
— Camille Sévigny

0

Das funktioniert bei mir, möge es auch jemandem helfen:

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"/>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.