2015-01-10 3 views
6

В моей деятельности я:Скрыть android.support.v7.widget.Toolbar программно

setSupportActionBar(toolbar); 

где панель инструментов является экземпляром android.support.v7.widget.Toolbar

Есть ли способ после этого программно скрывать и отображать виджет панели инструментов? Я уже пытался

toolbar.setVisibility(View.INVISIBLE); 

, но это только делает его невидимым, и она по-прежнему занимает пространство, так что содержание деятельности начинается после того, как это, и я вижу белое пространство, а не в заголовке.

+1

Я предполагаю, что здесь, но вы, вероятно, можно легко назвать 'getSupportActionBar() скрыть();.' – Budius

+1

Это действительно странно, я был под впечатлением, что после установите его как actionBar, он будет работать как таковой. О, хорошо ... Изучайте каждый день. – Budius

+0

@Budius Пожалуйста, проигнорируйте меня. Я просто устанавливал его как SupportActionBar где-то позже. Это была моя ошибка, и ваше решение работает, как и ожидалось. Спасибо! – nucleo

ответ

14

INVISIBLE только скрывает вид.

GONE однако, скроет представление и помешает ему заняться любым пространством.

toolbar.setVisibility(View.GONE); 
+0

Да, это очевидно, и я n00b. Спасибо, он работает как ожидалось! – nucleo

3

Если панель инструментов находится внутри AppBarLayout, то вы можете использовать setExpanded метод AppBarLayout, чтобы развернуть и свернуть панель инструментов с или без анимации.

setExpanded(boolean expanded, boolean animate) 

этот метод доступен из v23 Библиотеки поддержки.

От documentation для справки.

Как и при прокрутке AppBarLayout, этот метод основан на том, что этот макет является прямым дочерним элементом CoordinatorLayout.

расширен: верно, если макет должен быть полностью расширен, ложные, если она должна быть полностью разрушилась

одушевленные: Следует ли анимировать в новое состояние

AppBarLayout appBarLayout = (AppBarLayout)findViewById(R.id.appBar); 

расширить панель инструментов с анимацией.

appBarLayout.setExpanded(true, true); 

, чтобы свернуть панель инструментов с помощью анимации.

appBarLayout.setExpanded(false, true); 
0

Вот мой код. Попробуйте это. Он отлично работал для меня.

private static final float APPBAR_ELEVATION = 14f; 

    private void hideAppBar(final AppBarLayout appBar) { 
       appBar.animate().translationY(-appBar.getHeight()).setInterpolator(new LinearInterpolator()).setDuration(500); 

    } 
    public void showAppBar(final AppBarLayout appBar){ 
       appBar.animate().translationY(0).setInterpolator(new LinearInterpolator()).setDuration(500).setListener(new AnimatorListenerAdapter() { 
          @Override 
          public void onAnimationEnd(Animator animation) { 
           appBar.setElevation(APPBAR_ELEVATION); 
          } 
       }); 
    } 

Надеется, что это может помочь вам

Смежные вопросы