3

У меня есть активность с AppBarLayout, CollapsingToolbarLayout и панель инструментов. Настройка заголовка и субтитров из кода. Изначально я хочу, чтобы панель инструментов скрывалась и показывалась при свертывании макета Appbar, С моим кодом его работа (панель инструментов скрыта изначально), но всегда отображается заголовок панели инструментов и субтитры. Как я показывать название только тогда, когда AppBar коллапс раскладки полностьюПанель инструментов Android отображает название и субтитры только тогда, когда AppBarLayout собрал

<android.support.design.widget.AppBarLayout 
    android:id="@+id/app_bar" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/app_bar_height" 
    android:fitsSystemWindows="true" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/toolbar_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     app:titleEnabled="false" 
     app:contentScrim="?attr/colorPrimary" 
     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/AppTheme.PopupOverlay" /> 

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

Название Установки и субтитры

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 
    getSupportActionBar().setTitle("Title"); 
    getSupportActionBar().setSubtitle("sutitle"); 

enter image description here

+0

Вы должны 'setTitle' на' CollapsingToolbarLayout'. Не обращайтесь непосредственно к «Панели инструментов» или «ActionBar». Обратите внимание: 'CollapsingToolbarLayout' НЕ поддерживает субтитры. –

+0

Как я могу достичь этой функциональности –

+0

Вариант a) Запишите проблему здесь https://code.google.com/p/android/issues/list, параметр b) Откройте исходный код CollapsingToolbarLayout, поймите, как он работает, и добавьте функциональность, которую вы необходимость. Если вы выберете этот путь, рассмотрите возможность открытого поиска вашего решения, так как другие могут иметь схожие потребности. Благодаря! –

ответ

0

Я решить мою проблему с помощью ControllableAppBarLayout в XML и обрабатывать его расшириться, развалился, IDEAL чтобы показать/установить мой TITLE и SUBTITLE, используя следующий подход.

ControllableAppBarLayout appBarLayout = (ControllableAppBarLayout) findViewById(R.id.app_bar); 
    appBarLayout.setOnStateChangeListener(new ControllableAppBarLayout.OnStateChangeListener() { 

     @Override 
     public void onStateChange(ControllableAppBarLayout.State toolbarChange) { 
      switch (toolbarChange) { 

       case COLLAPSED: { 
        Log.i(TAG, "COLLAPSED2"); 
        if (mProfileDetails != null) { 
         getSupportActionBar().setTitle(mProfileDetails.userDetails.userFullname); 
         getSupportActionBar().setSubtitle(Html.fromHtml("<small>" + mProfileDetails.userDetails.headline + "</small>")); 
        } 
        break; 
       } 
       case EXPANDED: 
        Log.i(TAG, "EXPANDED"); 
        getSupportActionBar().setTitle(""); 
        getSupportActionBar().setSubtitle(""); 
        break; 

       case IDLE: // Just fired once between switching states 
        Log.i(TAG, "IDLE"); 
        getSupportActionBar().setTitle(""); 
        getSupportActionBar().setSubtitle(""); 
        break; 
      } 
     } 
    }); 
1

Простой AppBarLayout.OnOffsetChangedListener должен сделать трюк, используя только встроенные просмотры:

AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.app_bar); 
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener { 
    @Override 
    public void onOffsetChanged(AppBarLayout appBarLayout, int offset) { 
      ActionBar actionBar = getSupportActionBar(); 
      boolean toolbarCollapsed = Math.abs(offset) >= appBarLayout.getTotalScrollRange(); 
      actionBar.setTitle(toolbarCollapsed ? yourTitle : ""); 
      actionBar.setSubtitle(toolbarCollapsed ? yourSubTitle : ""); 
     } 
}); 

(Этот код изначально был написан на C# (Xamarin), а не Java, поэтому незначительные изменения могут быть необходимы)