
Anaximandro Andrade
ich benutze CollapsingToolBarLayout
zusammen mit AppBarLayout
und CoordinatorLayout
, und sie funktionieren insgesamt einwandfrei. Ich stelle meine ein Toolbar
Wenn ich nach oben scrolle, möchte ich wissen, ob es eine Möglichkeit gibt, den Titeltext der Symbolleiste zu ändern, wann CollapsingToolBarLayout
es ist zusammengebrochen.
Zusammenfassend möchte ich zwei verschiedene Titel Wenn gescrollt und wann erweitert.
Vielen Dank im Voraus
Dieser Code hat bei mir funktioniert
mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
if (verticalOffset == -mCollapsingToolbarLayout.getHeight() + mToolbar.getHeight()) {
//toolbar is collapsed here
//write your code here
}
}
});
Ich teile die vollständige Implementierung, basierend auf dem Code von @Frodi Beggins und @Nifhel:
public abstract class AppBarStateChangeListener implements AppBarLayout.OnOffsetChangedListener {
public enum State {
EXPANDED,
COLLAPSED,
IDLE
}
private State mCurrentState = State.IDLE;
@Override
public final void onOffsetChanged(AppBarLayout appBarLayout, int i) {
if (i == 0) {
if (mCurrentState != State.EXPANDED) {
onStateChanged(appBarLayout, State.EXPANDED);
}
mCurrentState = State.EXPANDED;
} else if (Math.abs(i) >= appBarLayout.getTotalScrollRange()) {
if (mCurrentState != State.COLLAPSED) {
onStateChanged(appBarLayout, State.COLLAPSED);
}
mCurrentState = State.COLLAPSED;
} else {
if (mCurrentState != State.IDLE) {
onStateChanged(appBarLayout, State.IDLE);
}
mCurrentState = State.IDLE;
}
}
public abstract void onStateChanged(AppBarLayout appBarLayout, State state);
}
Und dann können Sie es verwenden:
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {
@Override
public void onStateChanged(AppBarLayout appBarLayout, State state) {
Log.d("STATE", state.name());
}
});

Fehler passieren
Diese Lösung funktioniert perfekt für mich zu erkennen AppBarLayout
kollabiert oder erweitert.
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
if (Math.abs(verticalOffset)-appBarLayout.getTotalScrollRange() == 0)
{
// Collapsed
}
else
{
//Expanded
}
}
});
Gebraucht addOnOffsetChangedListener
auf der AppBarLayout
.

Artur Gniewowski
Dieser Code funktioniert perfekt für mich. Sie können die Prozentskala verwenden, wie Sie möchten
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
double percentage = (double) Math.abs(verticalOffset) / collapsingToolbar.getHeight();
if (percentage > 0.8) {
collapsingToolbar.setTitle("Collapsed");
} else {
collapsingToolbar.setTitle("Expanded");
}
}
10106500cookie-checkAndroid CollapsingToolbarLayout einklappen Listeneryes