0

Я использую CollapsingToolBarLayout в своем основном действии, но хочу только, чтобы он расширялся в некоторых фрагментах. Для этого я использовал эти методы (сразу после операций фрагмента/отладки). Они успешно анимируют панель инструментов, но она по-прежнему расширяема в фрагментах, которые называются lockAppBarClosed.Предотвращение CollapsingToolBarLayout от расширения программно

public void unlockAppBarOpen(boolean animate){ 
    appBarLayout.setExpanded(true, animate); 
    appBarLayout.setEnabled(true); 
    appBarLayout.setActivated(true); 
} 
public void lockAppBarClosed(boolean animate){ 
    appBarLayout.setExpanded(false, animate); 
    appBarLayout.setEnabled(false); 
    appBarLayout.setActivated(false); 
} 

setEnabled и setActivated, кажется, ничего не делать.

Для справки, вот мой app_bar_main.xml файл:

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/app_bar_extended" 
    android:fitsSystemWindows="true" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 
    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsing_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     app:contentScrim="?attr/colorPrimary" 
     app:expandedTitleTextAppearance="@android:color/transparent" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed"> 
     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_collapseMode="pin" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 
    </android.support.design.widget.CollapsingToolbarLayout> 
</android.support.design.widget.AppBarLayout> 

<FrameLayout 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:focusable="true" 
    android:clickable="true" 
    android:background="?android:attr/selectableItemBackground" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 
</FrameLayout> 

Я попытался установить высоту AppBarLayout через LayoutParams(), но это, для некоторых причина, предотвращает воспроизведение анимации, даже если для параметра animate установлено значение true. Установка флажков прокрутки на ни один или always collapsed ничего не делает, и я тоже не ищу эффект прокрутки snap.

В идеале анимация панели приложения не должна быть в одном фрагменте (как и в обычном режиме), а также разворачивании/расширении анимации при переходе между фрагментами и желаемыми.

Если у вас есть предложения, они будут высоко оценены. Спасибо.

ответ

0

Вместо того чтобы использовать CollapsingToolBarLayout в файле activity_main.xml, я предлагаю вам использовать панель действий или обычную панель инструментов в самом главном действии, где, как и в тех конкретных фрагментах, где вы хотите получить доступ к CollapsingToolBarLayout, добавьте его в xml файл фрагмента, как показано ниже:

  <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:app="http://schemas.android.com/apk/res-auto"> 
      <android.support.design.widget.CoordinatorLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
       android:id="@+id/specific_coordinate" 
      android:fitsSystemWindows="true"> 

      <android.support.design.widget.AppBarLayout 
       android:id="@+id/app_bar_layout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 

       android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
       android:fitsSystemWindows="true"> 

       <android.support.design.widget.CollapsingToolbarLayout 
        android:id="@+id/collapsing_toolbar" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        app:layout_scrollFlags="scroll|exitUntilCollapsed" 
        app:contentScrim="?attr/colorPrimary" 

        app:expandedTitleMarginStart="48dp" 
        app:expandedTitleMarginEnd="64dp" 
        android:fitsSystemWindows="true"> 

        <ImageView 
       android:id="@+id/pager" 
       android:layout_width="match_parent" 
       android:layout_height="250dp"> 
      </ImageView> 

        <android.support.v7.widget.Toolbar 
         android:id="@+id/toolbar" 
         android:layout_width="match_parent" 
         android:layout_height="?attr/actionBarSize" 
         app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
         app:expandedTitleTextAppearance="@style/CollapsingToolbarLayoutExpandedTextStyle" 
         app:layout_collapseMode="pin" > 

        </android.support.v7.widget.Toolbar> 

       </android.support.design.widget.CollapsingToolbarLayout> 

      </android.support.design.widget.AppBarLayout> 


      <android.support.v4.widget.NestedScrollView 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_gravity="fill_vertical" 
       android:layout_marginBottom="?attr/actionBarSize" 
       app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

       <include layout="@layout/specific_content" /> 

      </android.support.v4.widget.NestedScrollView> 





     </android.support.design.widget.CoordinatorLayout> 
      </LinearLayout> 

    where the specific_content.xml is an xml file that carries the fragment contents. 

    In the fragment code where you want the CollapsingToolBarLayout, disable the MainActivity actionbar/toolbar and you can see the CollapsingToolBarLayout there. Hope that will help. Happy coding. 
0

Использование mAppBarLayout.setExpanded(true) расширить панель инструментов и использовать mAppBarLayout.setExpanded(false) разрушаться панель инструментов программно.

Если вы хотите, чтобы предотвратить CollapsingToolbarLayout от расширения, то вы должны использовать mAppBarLayout.setLayoutParams(params) изменить CollapsingToolbarLayout высоту программно.

Collapse:

CoordinatorLayout.LayoutParams params =(CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams(); 
params.height = 3*80; // COLLAPSED_HEIGHT 

mAppBarLayout.setLayoutParams(params); 
mAppBarLayout.setExpanded(false); 

Expand:

CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams(); 
params.height = 3*200; // EXPANDED_HEIGHT 

mAppBarLayout.setLayoutParams(params); 
mAppBarLayout.setExpanded(true); 

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

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