Как включить кнопку «Назад», когда CollapsingToolbarLayout свернут

#android #android-toolbar #android-collapsingtoolbarlayout #android-appbarlayout

#Android #android-панель инструментов #android-collapsingtoolbarlayout #android-appbarlayout

Вопрос:

Мой XML-код для сворачивания панели инструментов,

     <android.support.design.widget.CollapsingToolbarLayout
        android:id="@ id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:expandedTitleGravity="left"
        app:expandedTitleMarginTop="-10dp"
        app:expandedTitleMarginStart="10dp"
        app:contentScrim="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="130dp">

            <ImageView
                android:id="@ id/ivCImage"
                android:layout_width="match_parent"
                android:layout_height="130dp"
                android:scaleType="fitXY"
                android:src="@drawable/image_place_holder" />

        </RelativeLayout>

        <android.support.v7.widget.Toolbar
            android:id="@ id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin">
            </android.support.v7.widget.Toolbar>

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

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

И то, что я сделал в кодировании, это,

 private CollapsingToolbarLayout collapsingToolbarLayout = null;

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);

    collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
  

Он всегда показывает значок «Назад», как и должно быть, но я хочу показать / включить значок «Домой» (назад), когда CollapsingToolbarLayout свернут. Как я могу этого добиться?
Любая помощь / предложение будут оценены.

Ответ №1:

Да, я сделал это легко, вам нужно просто включить обратную навигацию на панели инструментов, ничего общего со сворачивающейся панелью инструментов, а в файлах манифеста указано, что ваша активность относится к родительскому классу, как написано имя родительской активности.

  Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    initCollapsingToolbar();
  

При сворачивании:

  private void initCollapsingToolbar() {
    final CollapsingToolbarLayout collapsingToolbar =
            (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
    collapsingToolbar.setTitle(" ");
    AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appbar);
    appBarLayout.setExpanded(true);

    appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
        boolean isShow = false;
        int scrollRange = -1;

        @Override
        public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
            if (scrollRange == -1) {
                scrollRange = appBarLayout.getTotalScrollRange();
            }
            if (scrollRange   verticalOffset == 0) {
                collapsingToolbar.setTitle(getString(R.string.Yoga_tips));
                isShow = true;
            } else if (isShow) {
                collapsingToolbar.setTitle(" ");
                isShow = false;
            }
        }
    });
}
  

Ответ №2:

Сначала создайте флаг

 boolean FLAG_COLLAPSED = true;  //Change this according to your view 
  

Затем добавьте прослушиватель в свою панель приложений

 AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.AppBarLayout);
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
    @Override
    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
        if (Math.abs(verticalOffset) == appBarLayout.getTotalScrollRange()) {
            // Collapsed
            FLAG_COLLAPSED = true;
        } else if (verticalOffset == 0) {
            FLAG_COLLAPSED = false;
        } else {
            // Somewhere in between
        }
    }
}););
  

теперь в вашем методе обратного нажатия,

 @Override
public void onBackPressed() {
    if(FLAG_COLLAPSED){
        super.onBackPressed();
    }
}
  

Комментарии:

1. Я могу показать значок «Назад», как я хотел, но теперь проблема в том, что заголовок «CollapsingToolbarLayout» теперь отображается при сворачивании.