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