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?

Schatten
quelle
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.

Femi
quelle
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);

zackygaurav
quelle
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>
Ted Hopp
quelle
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".

Neoh
quelle
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.

Sangram Haladkar
quelle
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>
Ajji
quelle
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>
Javid Sattar
quelle
1

Für Dialoge können Sie Folgendes tun:

Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
AnhSirk Dasarp
quelle
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"/>
Kapil Rajput
quelle