#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» теперь отображается при сворачивании.