Установка 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
Это создает панель действий и сразу же скрывает ее, прежде чем она смогла отобразиться.
Но теперь есть другая проблема. После добавления 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:
Если вы показываете и скрываете панель действий несколько раз, возможно, вы заметили, что first показ не анимирован. С тех пор показ и сокрытие анимированы. Если вы хотите использовать анимацию при первом показе, вы можете использовать это:
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();