Ayarlama android:windowActionBar="false"
, ActionBar'ı gerçekten devre dışı bırakır, ancak dediğiniz gibi getActionBar();
null döndürür. Bu, aşağıdakiler tarafından çözülür:
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
Bu, ActionBar'ı oluşturur ve görüntülenme şansı olmadan hemen gizler.
Ama şimdi başka bir sorun daha var. windowActionBar="false"
Tema, temayı ekledikten sonra bir ActionBar yerine normal Pencere Başlığını çizer.
Bazı *.NoTitleBar
stok temalarını kullanarak bundan kaçınmaya çalışırsak veya <item name="android:windowNoTitle">true</item>
kendi temamızı koymaya çalışırsak , işe yaramaz.
Nedeni İşlem Çubuğu olmasıdır bağlı olduğunu İşlem Çubuğu bir dönüştürülmüş Pencere Başlığı olduğunu - kendisini görüntülemek için Pencere Başlığı üzerinde.
Bize yardımcı olabilecek hileler, Etkinlik teması xml'ye bir şey daha eklemektir:
<item name="android:windowActionBar">false</item>
<item name="android:windowTitleSize">0dp</item>
Bu, Pencere Başlığını sıfır yükseklikte, dolayısıyla pratikte görünmez yapar.
Sizin durumunuzda, açılış ekranını görüntülemeyi bitirdikten sonra
setContentView(R.layout.main);
getActionBar().show();
ve işiniz bitti. Etkinlik hiçbir ActionBar titremesi veya Pencere Başlığı gösterilmeden başlayacaktır.
ADDON:
ActionBar'ı birkaç kez gösterir ve gizlerseniz, ilk gösterimin animasyonlu olmadığını fark etmişsinizdir . O andan itibaren gösterme ve gizleme canlandırılır. İlk gösteride de animasyon olmasını istiyorsanız bunu kullanabilirsiniz:
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();
}
});
Aynı şey şu şekilde elde edilebilir:
protected void onPostResume() {
super.onPostResume();
getActionBar().hide();
ancak bunun Faaliyetin ilk gösterimi olup olmadığını kontrol etmek için ekstra bir mantık gerekebilir.
Fikir, ActionBar'ın gizlenmesini biraz geciktirmektir. Bir şekilde ActionBar'ın gösterilmesine izin veriyoruz, ancak hemen gizliyoruz. Böylece ilk canlandırılmamış gösterimin ötesine geçiyoruz ve bir sonraki gösterme ikinci olarak değerlendirilecek, böylece canlandırılacak.
Eğer bir şans var Tahmin ettiğin gibi o İşlem Çubuğu olabilir gibi gecikmeli işlem tarafından gizlenmeden önce görülme . Aslında durum budur. Çoğu zaman hiçbir şey görünmez, ancak arada bir, ActionBar titremesini bir anlığına görebilirsiniz.
Her durumda bu güzel bir çözüm değil, bu yüzden herhangi bir öneriyi kabul ediyorum.
V7 destek eylem çubuğu kullanıcısı için ek , kod şöyle olacaktır:
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getSupportActionBar().hide();
Theme.AppCompat.Light
... Bunu nasıl