Установка android:windowActionBar="false"
действительно отключает ActionBar, но затем, как вы говорите, getActionBar();
возвращает ноль. Это решается путем:
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
Это создает ActionBar и сразу же скрывает его, прежде чем он успел отобразиться.
Но сейчас есть другая проблема. После помещения windowActionBar="false"
в тему Activity рисует свой обычный заголовок окна вместо ActionBar.
Если мы попытаемся избежать этого, используя некоторые из стандартных *.NoTitleBar
тем или вставим <item name="android:windowNoTitle">true</item>
собственную тему, это не сработает.
Причина в том, что ActionBar зависит от заголовка окна для отображения самого себя, то есть ActionBar является преобразованным заголовком окна.
Таким образом, хитрость, которая может помочь нам, состоит в том, чтобы добавить еще одну вещь в нашу тему Activity xml:
<item name="android:windowActionBar">false</item>
<item name="android:windowTitleSize">0dp</item>
Это сделает заголовок окна с нулевой высотой, таким образом, практически невидимым.
В вашем случае, после того, как вы закончили с отображением заставки, вы можете просто позвонить
setContentView(R.layout.main);
getActionBar().show();
и вы сделали. Действие начнется без мерцания ActionBar и отображения заголовка окна.
ADDON:
Если вы показываете и скрываете панель действий несколько раз, возможно, вы заметили, что первый показ не анимирован. С тех пор показ и сокрытие анимированы. Если вы хотите использовать анимацию при первом показе, вы можете использовать это:
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();
}
});
То же самое может быть достигнуто с помощью:
protected void onPostResume() {
super.onPostResume();
getActionBar().hide();
но может потребоваться дополнительная логика, чтобы проверить, является ли это первым показом Действия.
Идея состоит в том, чтобы немного задержать сокрытие ActionBar. В некотором смысле мы позволяем отображать ActionBar, но затем скрываем его немедленно. Таким образом, мы выходим за пределы первого неанимированного показа, и следующий показ будет считаться вторым, поэтому он будет анимированным.
Как вы уже догадались , есть шанс , что ActionBar мог увидеть , прежде чем она была скрыта от просроченной работы. Это на самом деле так. В большинстве случаев ничего не видно, но время от времени вы можете увидеть мерцание ActionBar на долю секунды.
В любом случае это не очень хорошее решение, поэтому я приветствую любые предложения.
Дополнение для поддержки пользователей панели действий v7, код будет:
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getSupportActionBar().hide();
Theme.AppCompat.Light
... используйте это Как ответить [1] [1]: stackoverflow.com/a/25365193/1364896