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?
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">
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
.
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.
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.
Die Titelleiste kann wie auf der Entwicklerseite Android beschrieben auf zwei Arten entfernt werden:
In der manifest.xml
-Datei:
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">
Oder für eine bestimmte Aktivität:
<activity Android:theme="@Android:style/Theme.Black.NoTitleBar">
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
es ist ein Beispiel für die Materialverträglichkeit des Actionbar-Stils.
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.
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);
}
im Manifest erben den Stil:
<activity Android:name=".MainActivity" Android:theme="@style/generalnotitle">
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.
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>
Hinzufügen
<item name="Android:windowNoTitle">true</item>
in AppTheme (styles.xml)
Verwenden Sie einfach getActionBar().hide();
in Ihrer Hauptaktivität onCreate()
.
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
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:
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);
Verwenden Sie in Ihrer onCreate
-Methode das folgende Snippet:
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
Fügen Sie beide für das von Ihnen verwendete Thema hinzu:
<item name="windowActionBar">false</item>
<item name="Android:windowNoTitle">true</item>
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>
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);
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);
}
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>
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>
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.
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
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);
}
}
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>
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);
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.
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);
Ä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.
Ändern Sie einfach das übergeordnete Tag Ihres App-Themas in "Theme.AppCompat.Light.NoActionBar".
Ich verwende Android Xamarin und das hat bei mir funktioniert.
SupportActionBar.Hide();
SetContentView(Resource.Layout.activity_main);
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.
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.
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);
}
}