it-swarm.com.de

So blenden Sie die Titelleiste für eine Aktivität in XML mit einem vorhandenen benutzerdefinierten Thema aus

Ich möchte die Titelleiste für einige meiner Aktivitäten ausblenden. Das Problem ist, dass ich bei all meinen Aktivitäten einen Stil angewendet habe, daher kann ich das Thema nicht einfach auf @Android:style/Theme.NoTitleBar setzen.

Wenn ich das Thema NoTitleBar als übergeordnetes Element für meinen Stil verwende, wird die Titelleiste aus allen meinen Aktivitäten entfernt.

Kann ich irgendwo ein Element ohne Titel festlegen?

848
Janusz

Ich habe jetzt folgendes gemacht.

Ich habe einen Stil deklariert, der alles von meinem allgemeinen Stil erbt und dann die titleBar deaktiviert.

<style name="generalnotitle" parent="general">
    <item name="Android:windowNoTitle">true</item>
</style>

Jetzt kann ich diesen Stil für jede Aktivität festlegen, in der die Titelleiste ausgeblendet werden soll, um den anwendungsweiten Stil zu überschreiben und alle anderen Stilinformationen zu erben, ohne dass der Stilcode dupliziert wird.

Um den Stil auf eine bestimmte Aktivität anzuwenden, öffnen Sie AndroidManifest.xml und fügen Sie dem Tag activity das folgende Attribut hinzu.

<activity
    Android:theme="@style/generalnotitle">
377
Janusz

Tun Sie dies in Ihrer Methode onCreate().

//Remove title bar
this.requestWindowFeature(Window.FEATURE_NO_TITLE);

//Remove notification bar
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

//set content view AFTER ABOVE sequence (to avoid crash)
this.setContentView(R.layout.your_layout_name_here); 

this bezieht sich auf Activity.

1041
YaW

Sie können Ihren AndroidManifest.xml ändern:

<activity Android:name=".MainActivity"
          Android:label="@string/app_name"
          Android:theme="@Android:style/Theme.Black.NoTitleBar.Fullscreen">

oder verwenden Sie Android:theme="@Android:style/Theme.Black.NoTitleBar", wenn Sie keine Vollbildaktivität benötigen.

Hinweis: Wenn Sie zuvor eine Standardansicht verwendet haben, sollten Sie wahrscheinlich auch die übergeordnete Klasse von AppCompatActivity in Activity ändern.

510
Redax

Ich mag die Funktion this.requestWindowFeature(Window.FEATURE_NO_TITLE); nicht, weil die Titelleiste kurz angezeigt wird und dann verschwindet.

Ich mag den Android:theme="@Android:style/Theme.NoTitleBar" auch nicht, weil ich alle 3.0+ Holo-Änderungen verloren habe, an die sich die Benutzer der neuen Geräte gewöhnt haben. Also bin ich auf diese Lösung gestoßen.

Erstellen Sie in Ihrem Ordner res/values eine Datei mit dem Namen styles.xml (falls noch nicht vorhanden). In diese Datei den folgenden Code einfügen:

<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <style name="Theme.Default" parent="@Android:style/Theme"></style>
    <style name="Theme.NoTitle" parent="@Android:style/Theme.NoTitleBar"></style>
    <style name="Theme.FullScreen" parent="@Android:style/Theme.NoTitleBar.Fullscreen"></style>
</resources>

Erstellen Sie als Nächstes ein res/values-v11 mit einer anderen styles.xml -Datei (möglicherweise ist dies bereits vorhanden). In diese Datei den folgenden Code einfügen:

<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <style name="Theme.Default" parent="@Android:style/Theme.Holo"></style>
    <style name="Theme.NoTitle" parent="@Android:style/Theme.Holo.NoActionBar"></style>
    <style name="Theme.FullScreen" parent="@Android:style/Theme.Holo.NoActionBar.Fullscreen"></style>
</resources>

Und wenn Sie auf 4.0+ abzielen, erstellen Sie einen res/values-v14 -Ordner mit einer weiteren styles.xml -Datei (Ja, möglicherweise ist sie bereits vorhanden). In diese Datei den folgenden Code einfügen:

<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <style name="Theme.Default" parent="@Android:style/Theme.Holo.Light"></style>
    <style name="Theme.NoTitle" parent="@Android:style/Theme.Holo.Light.NoActionBar"></style>
    <style name="Theme.FullScreen" parent="@Android:style/Theme.Holo.Light.NoActionBar.Fullscreen"></style>
</resources>

Nachdem Sie alle diese Dateien erstellt haben, öffnen Sie die Datei AndroidManifiest.xml, und fügen Sie den Code hinzu:

Android:theme="@style/Theme.NoTitle"

auf das Aktivitäts-Tag der Aktivität, für die Sie keinen Titel möchten, oder auf das Anwendungs-Tag, wenn Sie möchten, dass es auf die gesamte Anwendung angewendet wird.

Jetzt erhalten Ihre Benutzer die ihrer Geräteversion zugeordneten Designs mit dem gewünschten Bildschirmlayout.

P.S. Das Ändern des Werts auf Android:theme="@style/Theme.FullScreen" hat den gleichen Effekt, entfernt jedoch auch die Benachrichtigungsleiste.

165
Devin Stewart

Die Titelleiste kann wie auf der Entwicklerseite Android beschrieben auf zwei Arten entfernt werden:

In der manifest.xml -Datei:

  1. Fügen Sie in application Folgendes hinzu, wenn Sie es für alle Aktivitäten in einer App entfernen möchten:

    <application Android:theme="@Android:style/Theme.Black.NoTitleBar">
    
  2. Oder für eine bestimmte Aktivität:

    <activity Android:theme="@Android:style/Theme.Black.NoTitleBar">
    
101
whiteShadow

die richtige Antwort ist wahrscheinlich, ActionbarActivity nicht zu erweitern, sondern nur Activity


wenn Sie immer noch die Actionbar-Aktivität verwenden, funktioniert dies anscheinend:

@Override
protected void onCreate(Bundle savedInstanceState) {          
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide(); //<< this
    setContentView(R.layout.activity_main);
}

das scheint auch zu funktionieren:

styles.xml:

   <style name="AppBaseTheme" parent="Theme.AppCompat.Light" >
          <item name="Android:windowNoTitle">true</item>   <!-- //this -->     
   </style>

ich könnte es so machen, wie Scott Biggs es geschrieben hat. diese Art von Arbeiten. außer es gibt dann kein thema. Ich meine, der Hintergrund des Einstellungsmenüs ist transparent:

nur ändern

public class MainActivity extends ActionBarActivity {

zu Activity oder FragmentActivity

public class MainActivity extends Activity  {

allerdings könnte ich es mit Materialdesign gut genug aussehen lassen und die Aktionsleiste nicht entfernen: https://Gist.github.com/shimondoodkin/86e56b3351b704a05e5

  1. symbol der Anwendung festlegen
  2. stellen Sie die Farben der Aktionsleiste so ein, dass sie zum Design passen.
  3. setze das Icon auf das Einstellungsmenü
  4. weitere Symbole hinzufügen (Schaltflächen oben)

es ist ein Beispiel für die Materialverträglichkeit des Actionbar-Stils.

51
Shimon Doodkin

Wenn Sie this.requestWindowFeature(Window.FEATURE_NO_TITLE) verwenden, kann der Benutzer die Titelleiste während der Startanimation nur für einen Moment sehen, wenn die Aktivität über onCreate beginnt. Wenn Sie @Android:style/Theme.Black.NoTitleBar wie unten gezeigt verwenden, wird die Titelleiste während der Startanimation nicht angezeigt.

<activity 
    Android:name=".MainActivity" 
    Android:label="My App"
    Android:theme="@Android:style/Theme.Black.NoTitleBar"
    Android:screenOrientation="portrait">

das obige Beispiel überschreibt natürlich Ihr vorhandenes Anwendungsthema. Wenn Sie ein vorhandenes Thema haben, fügen Sie <item name="Android:windowNoTitle">true</item> hinzu.

43
raj c

was bei mir funktioniert:

1- in styles.xml:

 <style name="generalnotitle" parent="Theme.AppCompat.Light" >
          <item name="Android:windowNoTitle">true</item>   <!-- //this -->     
   </style>

2- in MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {          
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide(); //<< this
    setContentView(R.layout.activity_main);
}
  1. im Manifest erben den Stil:

    <activity Android:name=".MainActivity" Android:theme="@style/generalnotitle">
    
36
Flowra

als ich versuchte, all diese hochgestimmten Antworten zu verwenden, stürzte meine App immer ab. (Ich denke, es hat etwas mit dem "@ Android: Stil" zu tun?)

Die beste Lösung für mich war, Folgendes zu verwenden:

Android:theme="@style/Theme.AppCompat.NoActionBar"

Keine Kopf-/Titelleiste mehr. Platzieren Sie es einfach in <application>...</application> oder <activity>...</activity>, je nachdem, ob Sie es in der gesamten App oder nur in einer bestimmten Aktivität (nicht) möchten.

24

Erstellen Sie ein Thema wie folgt.

 <!-- Variation on the Light theme that turns off the title -->
<style name="MyTheme" parent="Android:style/Theme.Black">
    <item name="Android:windowNoTitle">true</item>
</style>
17
sandy

Hinzufügen

<item name="Android:windowNoTitle">true</item>

in AppTheme (styles.xml)

16
nijas

Verwenden Sie einfach getActionBar().hide(); in Ihrer Hauptaktivität onCreate().

14
Anas Al Hamdan

Sie müssen nur den AppTheme -Stil in Style.xml ändern, wenn Sie die Definition von DarkActionBar ersetzen.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

zu NoActionBar

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

das in AndroidManifast.xml definierte AppTheme

13
Daniel Levi

Für AppCompat hat folgende Lösung für mich funktioniert:

Fügen Sie in Ihrem styles.xml einen neuen Themenstil ohne Aktionsleiste hinzu, und legen Sie parent="Theme.AppCompat.NoActionBar" fest.

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">

    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimary</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="Android:windowBackground">@color/colorPrimary</item>

</style>


Implementieren Sie nun in androidManifest.xml den gleichen Designstil für Ihre Begrüßungsbildschirmaktivität.

<activity
        Android:name=".ActivityName"
        Android:theme="@style/SplashTheme"> // apply splash them here 

        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>

Hier ist das Ergebnis:

enter image description here

12
Krunal

Sie können diesen Code in Ihrer Java -Datei verwenden

fügen Sie diese Zeile hinzu, bevor Sie Ihre Ansicht festlegen oder laden

requestWindowFeature(Window.FEATURE_NO_TITLE); 
setContentView(R.layout.activity_main);
11
Aneh Thakur

Verwenden Sie in Ihrer onCreate -Methode das folgende Snippet:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
10
Mahesh

Fügen Sie beide für das von Ihnen verwendete Thema hinzu:

    <item name="windowActionBar">false</item>
    <item name="Android:windowNoTitle">true</item>
10

Fügen Sie diesen Stil Ihrer style.xml-Datei hinzu

 <style name="AppTheme.NoActionBar">
     <item name="windowActionBar">false</item>
     <item name="windowNoTitle">true</item>
 </style>

Verweisen Sie danach auf diesen Stilnamen in Ihrer androidManifest.xml in bestimmten Aktivitäten, in denen Sie die Titelleiste nicht sehen möchten, wie unten.

<activity Android:name=".youractivityname"
     Android:theme="@style/AppTheme.NoActionBar">
</activity>
10
No one

Ich verwende ein Support Widget Toolbar v7. Um also den Titel löschen oder verstecken zu können, müssen wir diesen schreiben.

Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);

//Remove¡ing title bar
getSupportActionBar().setDisplayShowTitleEnabled(false);
7
MontDeska

Oder wenn Sie die Titelleiste zu einem beliebigen Zeitpunkt ein- oder ausblenden möchten:

private void toggleFullscreen(boolean fullscreen)
{
    WindowManager.LayoutParams attrs = getWindow().getAttributes();
    if (fullscreen)
    {
        attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
    }
    else
    {
        attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
    }
    getWindow().setAttributes(attrs);
}
7
cprcrack

Das hat mein Problem gelöst

Im Manifest meiner Tätigkeit:

<application
        Android:allowBackup="true"
        Android:icon="@mipmap/ic_launcher"
        Android:label="@string/app_name"
        Android:supportsRtl="true"
        Android:theme="@style/AppTheme">
        <activity Android:name=".SplashScreen">
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />

                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

Stilvoll unter dem Namen "AppTheme":

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme"
        parent="Theme.AppCompat.Light.NoActionBar">
        **<item name="windowActionBar">false</item>
        <item name="Android:windowNoTitle">true</item>**
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>
6
Sam

In meinem Fall, wenn Sie Android Studio 2.1 verwenden und Ihre SDK-Kompilierungsversion 6.0 ist, wechseln Sie einfach zu Ihrer manifest.xml-Datei und ändern Sie den folgenden Code:

Hier ist der Code:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.example.lesterxu.testapp2">

    <application
        Android:allowBackup="true"
        Android:icon="@mipmap/ic_launcher"
        Android:label="@string/app_name"
        Android:supportsRtl="true"
        Android:theme="@style/Theme.AppCompat.NoActionBar">
        <activity Android:name=".MainActivity">
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />

                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Und hier ist das Snip-Shooting (siehe Highlight-Code): enter image description here

6
Lester

Die erste Antwort ist Amphibole. Hier ist meine Erklärung: add:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);

in der oncreate () Methode.

vor:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);

(nicht nur vor setContentView) Wenn Sie dies nicht tun, erhalten Sie forceclose. +1 diese Antwort.

5
David

Um sowohl den Titel als auch die Aktionsleiste auszublenden, habe ich Folgendes getan:

Im Aktivitäts-Tag von Manifest:

Android:theme="@style/AppTheme.NoActionBar"

In Activity.Java vor setContentView:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

d.h.

// Titelleiste entfernen

this.requestWindowFeature (Window.FEATURE_NO_TITLE);

// Benachrichtigungsleiste entfernen

this.getWindow (). setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

NOTE: Sie müssen diese Zeilen behalten, bevor setContentView

5
Shylendra Madda

So sieht der komplette Code aus. Beachten Sie den Import von Android.view.Window.

package com.hoshan.tarik.test;

import Android.app.Activity;
import Android.os.Bundle;
import Android.view.Window;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
    }
}
4
Tarik

Fügen Sie theme @ style/Theme.AppCompat.Light.NoActionBar in Ihre Aktivität auf AndroidManifest.xml wie folgt ein

<activity
        Android:name=".activities.MainActivity"
        Android:theme="@style/Theme.AppCompat.Light.NoActionBar">
    </activity>
4
Samuel Ivan

Ich habe zwei Gründe gefunden, warum dieser Fehler auftreten könnte.

Eins. Die Window-Flags sind bereits in super.onCreate(savedInstanceState); gesetzt. In diesem Fall möchten Sie möglicherweise die folgende Befehlsreihenfolge verwenden:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);      

super.onCreate(savedInstanceState);

Zwei. Sie haben die Schaltfläche Sichern/Sichern in der Titelleiste, was bedeutet, dass die aktuelle Aktivität ein hierarchisches untergeordnetes Element einer anderen Aktivität ist. In diesem Fall möchten Sie diese Codezeile möglicherweise auskommentieren oder von innen entfernen die onCreate Methode.

getActionBar().setDisplayHomeAsUpEnabled(true);
4
Dzhuneyt

Wenn Sie das tun, was Benutzer YaW und Doug Paul sagen, müssen Sie berücksichtigen, dass Fensterfunktionen festgelegt werden müssen, bevor Sie setContentView aufrufen. Wenn nicht, erhalten Sie eine Ausnahme.

3
fergerm

in der Manifestdatei hinzufügen,

  Android:theme="@Android:style/Theme.Translucent.NoTitleBar"

füge folgende Zeile in deine Java Datei ein,

  this.requestWindowFeature(Window.FEATURE_NO_TITLE);
3
Kunal Dharaiya

Ähm, Sie können Themen auf einzelne Aktivitäten in XML anwenden, z. B. keinen Titel. Mit anderen Worten, nehmen Sie es aus Ihrem Anwendungs-Tag heraus, öffnen Sie die Tag-Deklaration und fügen Sie es in das gewünschte Aktivitäts-Tag ein.

2
Fred Grott

Ändern Sie einfach das übergeordnete Tag Ihres App-Themas in "Theme.AppCompat.Light.NoActionBar".

2
Cloy

Ich verwende Android Xamarin und das hat bei mir funktioniert.

SupportActionBar.Hide();
SetContentView(Resource.Layout.activity_main);
1
jase

Es gibt Erwähnungen in diesem Beitrag, aber niemand spricht ihn ausdrücklich an. Vielleicht spart dies den Leuten etwas Zeit. Wenn Sie wie ich sind und mehrere Klassen haben, die eine Stammklasse erweitern, wodurch ActionBarActivity erweitert wird, ist es möglicherweise nicht sofort offensichtlich, dass der Versuch, diese Aktivität auf NoTitleBar/NoActionBar festzulegen, einen Fehler auslöst, insbesondere:

Msgstr "Sie müssen ein Theme.AppCompat - Theme (oder einen Nachkommen) für diese Aktivität verwenden."

Sie können dieses Problem beheben, indem Sie die Erweiterung auf Aktivität ändern.

1
farnett

WindowManager.LayoutParams in Android Studio-Dokumentation besagt, dass FLAG_FULLSCREEN "Fensterflag: Alle Bildschirmdekorationen (wie die Statusleiste) ausblenden, während dieses Fenster angezeigt wird." Daher füllt diese Markierung nicht den gesamten Bildschirm mit meinem Inhalt.

0
Lawn

Ich habe die Lösung von @YaW verwendet, um den Titel und die Benachrichtigung aus meiner Aktivität zu entfernen. Der Titel und die Benachrichtigung werden jedoch angezeigt, wenn ein Dialogfeld angezeigt wird. Um dies auf einen Dialog anzuwenden, klassifizieren Sie den Dialog wie folgt:

public class MyDialog extends Android.app.Dialog{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        super.onCreate(savedInstanceState);

        setContentView(R.layout.mydialog);
    }    
}
0
Chris Sprague