wake-up-neo.net

Wie kann man die Aktionsleiste ausblenden, bevor eine Aktivität erstellt wird, und sie dann wieder anzeigen?

Ich muss den Begrüßungsbildschirm in meiner Honeycomb-App implementieren. __ Ich verwende diesen Code in onCreate von activity, um Splash anzuzeigen:

setContentView(R.layout.splash);
getActionBar().hide();

und diesen Code, um die Hauptbenutzeroberfläche nach einiger Zeit anzuzeigen:

setContentView(R.layout.main);
getActionBar().show();

Aber before onCreate wird aufgerufen, und splash wird angezeigt. Wenn die Aktionsleiste angezeigt wird, dauert es nur wenig Zeit.

Wie kann ich die Aktionsleiste unsichtbar machen?

Ich habe versucht, das Thema auf eine Aktivität ohne Aktionsleiste anzuwenden:

<item name="Android:windowActionBar">false</item>

in diesem Fall gibt getActionBar () jedoch immer null zurück und ich habe keine Möglichkeit gefunden, es erneut anzuzeigen.

232
Ilya Izhovkin

Durch die Einstellung von Android:windowActionBar="false" wird die ActionBar wirklich deaktiviert, aber wie Sie sagen, gibt getActionBar(); den Wert null zurück.

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
    getActionBar().hide();

    setContentView(R.layout.splash); // be sure you call this AFTER requestFeature

Dadurch wird die ActionBar erstellt und sofort ausgeblendet, bevor sie angezeigt werden konnte.

Aber jetzt gibt es ein anderes Problem. Nachdem Sie windowActionBar="false" in das Design eingefügt haben, zeichnet die Aktivität ihren normalen Fenstertitel anstelle einer Aktionsleiste.
Wenn wir dies versuchen, indem wir einige der *.NoTitleBar stock-Themes verwenden, oder wir versuchen, <item name="Android:windowNoTitle">true</item> in unserem eigenen Thema zu verwenden, funktioniert es nicht.
Der Grund ist, dass die ActionBar abhängig vom Fenstertitel selbst angezeigt wird - das heißt, die ActionBar ist ein transformierter Fenstertitel.
Der Trick, der uns dabei helfen kann, besteht darin, unserem Activity-Theme xml eine weitere Sache hinzuzufügen:

<item name="Android:windowActionBar">false</item>
<item name="Android:windowTitleSize">0dp</item>

Dadurch wird der Fenstertitel auf Null gebracht und ist praktisch unsichtbar.

In Ihrem Fall können Sie nach dem Anzeigen des Begrüßungsbildschirms einfach anrufen 

setContentView(R.layout.main);
getActionBar().show();

und du bist fertig Die Aktivität beginnt, ohne dass ActionBar flackert oder Fenstertitel angezeigt wird.

ADDON: Wenn Sie die ActionBar mehrmals ein- und ausblenden, haben Sie vielleicht bemerkt, dass die first -Anzeige nicht animiert ist. Von da an werden Zeigen und Verstecken animiert. Wenn Sie auch eine Animation auf der ersten Show haben möchten, können Sie Folgendes verwenden:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_ACTION_BAR);

    // delaying the hiding of the ActionBar
    Handler h = new Handler();
    h.post(new Runnable() {     
        @Override
        public void run() {
            getActionBar().hide();
        }
    });

Dasselbe kann erreicht werden mit:

protected void onPostResume() {
    super.onPostResume();
    getActionBar().hide();

es kann jedoch eine zusätzliche Logik erforderlich sein, um zu überprüfen, ob dies die erste Anzeige der Aktivität ist.

Die Idee ist, das Verstecken der ActionBar etwas zu verzögern. In gewisser Weise lassen wir die ActionBar angezeigt werden, verbergen sie aber sofort. Wir gehen also über die erste nicht animierte Show hinaus, und die nächste Show wird als zweite betrachtet, also wird sie animiert.

Wie Sie vielleicht schon vermutet haben, besteht die Chance, dass die ActionBar könnte gesehen werden, bevor sie durch die verzögerte Operation verborgen wurde. Das ist eigentlich der Fall. Meistens ist nichts zu sehen, aber ab und zu kann man die ActionBar für einen Sekundenbruchteil flackern sehen.

In jedem Fall ist dies keine schöne Lösung, daher freue ich mich über jegliche Vorschläge.

Addition Für Actionbar-Benutzer der Version 7 wird der Code wie folgt lauten:

getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getSupportActionBar().hide();
330
Cleric

Verwenden Sie diesen einfachen Code in Ihrer .class-Datei, um die Aktionsleiste auszublenden

getSupportActionBar().hide();
45
gaurav

Wenn Sie ActionBarSherlock verwenden, verwenden Sie in Ihrer Aktivität Theme.Sherlock.NoActionBar Theme 

<activity 
    Android:name=".SplashScreenActivity"
    Android:theme="@style/Theme.Sherlock.NoActionBar">
    <intent-filter>
        <action Android:name="Android.intent.action.MAIN" />
        <category Android:name="Android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
37
kaubatak

Erstellen Sie zwei Stile:

<style name="AppThemeNoBar" parent="Theme.AppCompat.Light">
     <item name="Android:windowNoTitle">true</item>
</style>

<style name="AppThemeBar" parent="Theme.AppCompat.Light">
    <item name="Android:windowNoTitle">false</item>
</style>

Legen Sie AppThemeNoBar als Anwendungsthema und AppThemeBar auf die Aktivität fest, in der die Aktionsleiste angezeigt werden soll.... Mit zwei Stilen wird die Aktionsleiste nicht angezeigt, während Ansichten geladen werden. 

Überprüfen Sie diesen Link Android: Aktionsleiste beim Laden der Ansicht ausblenden

19
Laranjeiro

Hallo, ich habe eine einfache Lösung mit 2 Themen

  1. Begrüßungsbildschirm-Design (fügen Sie es dem Manifest hinzu): 

    <style name="SplashTheme" parent="@Android:style/Theme.Holo.NoActionBar"> <item name="Android:windowBackground">@color/red</item> </style>

  2. normales Thema (fügen Sie es in Ihre Aktivität von setTheme (R.style.Theme) ein):

    <style name="Theme" parent="@style/Theme.Holo"> <item name="Android:windowBackground">@color/blue</item> </style>

So unterstützen Sie SDK 10:

@Override    
public void onCreate(Bundle savedInstanceState) {

    setTheme(R.style.Theme);      
    super.onCreate(savedInstanceState);

      ...........
      ...........
}
17
Abdullah

Ich habe auch versucht, Action Bar auf Android 2.2 zu verbergen, aber keine dieser Lösungen hat funktioniert. Alles endet mit einem Sturz. Ich überprüfte die DDMS LOg. Es wurde mir mitgeteilt, dass 'Theme.AppCompat' verwendet werden sollte. Zuletzt konnte ich das Problem durch Ändern der Android:theme="@Android:style/Theme.Holo.Light.NoActionBar"Line lösen

in Android:theme="@style/Theme.AppCompat.NoActionBar"und es hat funktioniert, aber das Interface war dunkel.

dann habe ich Android:theme="@style/Theme.AppCompat.Light.NoActionBar" ausprobiert und endlich das bekommen, was ich wollte.

Als ich danach nach "AppCompat" auf der Developer Site suchte, bekam ich dieses.

Ich denke also, die Lösung für Android 2.2 ist

<activity
    Android:name=".MainActivity"
    Android:theme="@style/Theme.AppCompat.Light.NoActionBar" >
    <intent-filter>
        <action Android:name="Android.intent.action.MAIN" />
        <category Android:name="Android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Und entschuldige mich für mein schlechtes Englisch wie immer.

14
S.Ahsan

Das beste Ergebnis war für mich, eine Aktivität mit ThemeNoTitleBar und ohne Inhalt als Startprogramm zu erstellen. Dann ruft diese Aktivität direkt zum anderen auf. 

Wenn Sie möchten, können Sie natürlich Inhalte zur Splash-Aktivität hinzufügen, aber in meinem Fall wollte ich die Anwendung nur direkt anzeigen.

Manifest:

<activity
        Android:name="com.package.SplashActivity"
        Android:theme="@Android:style/Theme.Black.NoTitleBar" >
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Aktivität:

public class SplashActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    //start StartActivity
    Intent intent = new Intent(this, StartActivity.class);
    startActivity(intent);
    finish();
}

}

11
javak

Wenn Sie eine Activity-Datei mit einem Startbildschirm verwenden, können Sie dies tun, wenn Sie SherlockActionBar verwenden.

getSupportActionBar().hide();

Nach dem Begrüßungsbildschirm können Sie es wieder anzeigen mit ...

getSupportActionBar().show();

Es sollte dasselbe mit der nativen ActionBar von Android sein.

9
Luser_k

am besten und einfach

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

6
arslan haktic

Stellen Sie dieses Thema für Ihre Aktivität ein und verwenden Sie die Support-Bibliothek v7 mit dem AppCompat-Design.

<style name="AppTheme.AppStyled" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimaryDark">@color/md_Indigo_100</item>
    <item name="colorPrimary">@color/md_Indigo_500</item>
    <item name="colorAccent">@color/md_red_500</item>
    <item name="Android:textColorPrimary">@color/md_white_1000</item>
    <item name="Android:textColor">@color/md_purple_500</item>
    <item name="Android:textStyle">bold</item>
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>
6

Die @Clerics-Lösung funktioniert. Dies scheint jedoch auch ein Problem mit einigen von Google entwickelten Apps zu sein: Google, Play Store, Talk. Auch andere große Apps wie Skype.

EDIT: Die Lösung von Bellow hat mir ein Problem mit actionbarsherlock auf api <4.0 gegeben

Fügen Sie Ihrem Manifest innerhalb Ihrer Anwendungs- oder Aktivitäts-Tags Folgendes hinzu:

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

Und dann in Ihrer Haupttätigkeit:

    // Set theme
    setTheme(R.style.YOUR_THEME);
    getSupportActionBar().setTitle(R.string.title);

    // Start regular onCreate()
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
6
Warpzit

Für Splashscreen sollten Sie diese Zeile in manifest verwenden und getActionBar() nicht verwenden.

<item name="Android:windowActionBar">false</item>

und einmal, wenn Splash Activity im Haupt Activity abgeschlossen ist, verwende unten oder nichts

<item name="Android:windowActionBar">true</item>
4
ingsaurabh

Probieren Sie das aus, es funktioniert für mich:

Im Folgenden wird die Titelleiste der Aktivität entfernt

 requestWindowFeature(Window.FEATURE_NO_TITLE);

Im Folgenden wird die Benachrichtigungsleiste ausgeblendet, damit die Aktivität im Vollbildmodus angezeigt wird

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

(Vollständiges Beispiel unten). Beachten Sie: Diese Methoden wurden aufgerufen, bevor wir die Inhaltsansicht unserer Aktivität festlegen

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Sets Application to full screen by removing action bar
        requestWindowFeature(Window.FEATURE_NO_TITLE);    
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.activity_main); 

        // without this check, we would create a new fragment at each orientation change!
        if (null == savedInstanceState)
            createFragment();
    }
3
user3862873

das kann nützlich sein
Fügen Sie dies Ihrem Manifest hinzu

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

prost

3
ralphgabb

Die beste Methode, die ich nach dem Lesen aller verfügbaren Optionen finde, besteht darin, das Hauptthema ohne ActionBar festzulegen und dann MyTheme als Code für alle Aktivitäten festzulegen.

Manifest:

<application
...
        Android:theme="@Android:style/Theme.Holo.Light.NoActionBar"
...>

BaseActivity:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTheme(R.style.GreenHoloTheme);
}

Dieser Weg hilft mir, ActionBar beim Start der Anwendung zu vermeiden!

2
DmRomantsov

Falls Sie über null verfügen, weil Sie die support library verwenden, müssen Sie anstelle von getActionBar()getSupportActionBar() aufrufen.

1
Naskov

Die bereits veröffentlichten Lösungen hatten den Sideffect, dass der erste Aufruf von .show () die ActionBar für mich nicht animierte.

Erstellen Sie ein transparentes Zeichenelement - so etwas:

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <solid
       Android:color="#00000000" />
</shape>

Legen Sie für den tatsächlichen Hintergrund der Aktionsleiste eine unsichtbare benutzerdefinierte Ansicht fest, die Sie in der Aktionsleiste festlegen:

getSupportActionBar().setCustomView(R.layout.actionbar_custom_layout);
      getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
              ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE);

Legen Sie den transparenten Hintergrund für die Aktionsleiste in onCreate fest:

getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.background_transparent));

Wichtig: Verbergen Sie die Aktionsleiste nicht sofort in onCreate, aber später mit einer kurzen Verzögerung - z. Wenn das Layout fertig ist:

getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    getSupportActionBar().hide();
                }
            });

Setzen Sie vor dem ersten Aufruf von .show () die benutzerdefinierte Ansicht sichtbar:

_actionbarRoot.setVisibility(View.VISIBLE);
getSupportActionBar().show();
1
mAx

Platzieren Sie Ihren Begrüßungsbildschirm in einer separaten Aktivität und verwenden Sie startActivityForResult der onCreate-Methode Ihrer Hauptaktivität, um ihn anzuzeigen. Dies funktioniert, weil laut den Dokumenten:

Wenn Sie startActivityForResult () mit einem requestCode> = 0 während des anfänglichen onCreate (Bundle savedInstanceState)/onResume () Ihrer Aktivität aufrufen, wird Ihr Fenster als Sonderfall nicht angezeigt, bis ein Ergebnis der gestarteten Aktivität zurückgegeben wird . Dadurch wird sichtbares Flackern beim Umleiten auf eine andere Aktivität vermieden.

Sie sollten dies wahrscheinlich nur tun, wenn das Argument für onCreatenull ist (das einen Neustart Ihrer Aktivität im Gegensatz zu einem Neustart aufgrund einer Konfigurationsänderung angibt).

0
Ted Hopp

Fügen Sie dies einfach in Ihre styles.xml ein

<item name="Android:windowNoTitle">true</item>
0
Jakub Trzcinka

Ich hatte immer noch einen Fehler mit dem Nullzeiger und schließlich half es, als ich zuerst getWindow (). RequestFeature () und dann super.onCreate () aufrief 

public void onCreate(Bundle savedInstanceState) {
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
super.onCreate(savedInstanceState);
getActionBar().show();
0
Matwosk

Fügen Sie dies einfach zu Ihrer MainActivity in der onCreate-Funktion hinzu.

val actionBar = supportActionBar?.apply { hide() }
0
MöritzRo

Am besten tun Sie dies, indem Sie die erste Aktivität als leere Aktivität und den gewünschten Inhalt erstellen und dann nach einiger Zeit eine weitere Aktivität auslösen. Wenn Sie auf diese Weise vorgehen, können Sie die erste Aktivität als Startbildschirm ohne Aktion ausführen Bar oder irgendetwas ... Hier ist meine erste Aktivität

package com.superoriginal.rootashadnasim.syllabus;

import Android.content.Intent;
import Android.os.Handler;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;

public class first_screen extends AppCompatActivity {



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_first_screen);


    final Handler h=new Handler();
    h.postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent intent=new     Intent(getApplicationContext(),DrawerChooseBranchMainActivity.class);
            startActivity(intent);
        }
    },2000);

}
}

Danach können Sie jede Ihrer Aktivitäten als erste Aktivität einfügen. Wenn Sie keine Aktionsleiste in einem Bildschirm haben möchten, fügen Sie diese einfach in Ihren Stilen ein

    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
0
ashad

Android Studio bietet Build-Vorlage für den Vollbildmodus. Wenn Sie Android Studio verwenden, können Sie die folgenden Schritte befolgen, um die Vollbildaktivität zu implementieren.

 First Step to Create new Activity

 Select select Full screen Activity

Erledigt. Android Studio hat Ihren Job gemacht, jetzt können Sie den Code für den Vollbildmodus überprüfen.

0

Tatsächlich könnten Sie einfach splash Activity mit NoActionBar Setzen und Ihr Haupt activity mit der Aktionsleiste setzen. 

0
Chauyan