Action bar Verhalten bei android: targetSdkVersion ist 16

Ich versuche, eine Aktionsleiste mit Tabs als Navigationsoptionen zu implementieren. Um dies zu tun, wähle ich die Option "Tabs + Swipe" im Abschnitt "Neue Leere Aktivität" des Assistenten "Neue Android App" wie unten gezeigt aus.

Tab + Wischen-Assistent

Nun, in der Android Manifest, wann

android:targetSdkVersion="15" 

Das ist der Standardwert, die Aktionsleiste sieht so auf einem Nexus 7 / Nexus 7 Emulator aus, das ist der gewünschte Look der App

Standardverhalten

Jetzt, wenn ich diese Zeile in der Android Manifest zu ändern

 android:targetSdkVersion="16" 

Das Aussehen der Aktionsleiste ändert sich dazu

Verhalten nach Android: targetSdkVersion = "16"

Der Standard-Look bleibt für jede Version von Android, aber 16, kann jemand bitte erklären, warum das Aussehen der Action-Bar plötzlich ändert sich, wenn die targetSdkVersion auf 16 gesetzt ist?

Das oben genannte ist im emulator ebenso wie in einem echten nexus 7 reproduzierbar.

Vollständige Screengrabs für

Normal: http://i.stack.imgur.com/VsBA2.png

Nach android: targetSdkVersion = "16": http://i.stack.imgur.com/OM6Y4.png

Update-10th March, 2013: Umschalten auf den Listen-Navigationsmodus (anstelle von Tabs), um die Verschiebung zu Android zu ermöglichen: targetSdkVersion = 17

  • Google Analytics blockiert Android App
  • Warum werden die Berechtigungen automatisch zu meinem AndroidManifest hinzugefügt, wenn sie die Google Play Services-Bibliothek enthalten
  • Absichtsfilter, um meine Aktivität zu starten, wenn benutzerdefinierte URI angeklickt wird
  • Einstellen des App-Namens im Anwendungs-Label funktioniert nicht
  • Wie man ein Layout in ein anderes in meinem Fall einbetten?
  • Binäre XML-Datei Zeile #: Fehler beim Aufblasen der Klasse Fragment: Nur auf Android (6.0) -Marshmallow
  • So deaktiviere man manifestes Zusammenführen in Android Studio
  • Als Musikspieler registrieren
  • One Solution collect form web for “Action bar Verhalten bei android: targetSdkVersion ist 16”

    Der Grund, den es bei der Einstellung von targetSDK auf 16 ändert, ist, weil Google geändert hat, wie Tabs in Jelly Bean gemessen werden. Genauer gesagt, schau dir das in android.internal.view.ActionBarPolicy :

     public boolean hasEmbeddedTabs() { final int targetSdk = mContext.getApplicationInfo().targetSdkVersion; if (targetSdk >= Build.VERSION_CODES.JELLY_BEAN) { return mContext.getResources().getBoolean(R.bool.action_bar_embed_tabs); } // The embedded tabs policy changed in Jellybean; give older apps the old policy // so they get what they expect. return mContext.getResources().getBoolean(R.bool.action_bar_embed_tabs_pre_jb); } 

    Allerdings vermute ich, dass du nicht nur den Grund willst, sondern eine Lösung. Leider kann ich Ihnen nicht einen einfachen Weg geben, um es nur eingebettet zu setzen.

    Ich kann vorschlagen, mit ActionBarSherlock , um es konsistent zu machen. Der Bonus dazu ist die Möglichkeit, Actionbars auf älteren Geräten zu verwenden. Bei der Verwendung (Portrait) kann ich bestätigen, dass, wenn du das targetSDK auf 16 setzt, das gestapelte Layout auf Jelly Bean, Ice Cream Sandwich, GingerBread und Froyo verwendet. Zumindest werden Sie in der Lage sein, Ihr Layout zu entwerfen, während Sie wissen, was zu erwarten ist.

    Denken Sie daran, dass in den meisten Fällen die Umstellung auf den Landschaftsmodus sie wieder in die Aktionsleiste einbetten wird, da es "genügend Raum" gibt, wie es misst.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.