CollapsingToolbarLayout-Titel nur im reduzierten Zustand anzeigen
Lesezeit: 5 Minuten
Psest328
ich habe es versucht setExpandedTitleColor und setCollapsedTitleColor (Umschalten auf und von transparent) ohne Glück. Ich kann auch keine eingebauten Methoden sehen, die das tun, wonach ich suche.
Ich möchte den Titel nur anzeigen, wenn das CollapsingToolbarLayout vollständig reduziert ist, andernfalls muss es ausgeblendet werden.
Irgendwelche Hinweise?
Steven274
Du kannst hinzufügen OnOffsetChangedListener zu AppBarLayout um festzustellen wann CollapsingToolbarLayout ein- oder ausgeklappt ist und seinen Titel festlegen.
Java
final CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsingToolbarLayout);
AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appBarLayout);
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
boolean isShow = true;
int scrollRange = -1;
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
if (scrollRange == -1) {
scrollRange = appBarLayout.getTotalScrollRange();
}
if (scrollRange + verticalOffset == 0) {
collapsingToolbarLayout.setTitle("Title");
isShow = true;
} else if(isShow) {
collapsingToolbarLayout.setTitle(" ");//careful there should a space between double quote otherwise it wont work
isShow = false;
}
}
});
Kotlin
var isShow = true
var scrollRange = -1
appBarLayout.addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener { barLayout, verticalOffset ->
if (scrollRange == -1){
scrollRange = barLayout?.totalScrollRange!!
}
if (scrollRange + verticalOffset == 0){
collapsingToolbarLayout.title = "Title Collapse"
isShow = true
} else if (isShow){
collapsingToolbarLayout.title = " " //careful there should a space between double quote otherwise it wont work
isShow = false
}
})
Diese Lösung funktioniert für API 23 und höher. Dies ist die richtigste Lösung.
– Simon
27. Oktober 2015 um 14:18 Uhr
Es hat bei mir funktioniert, musste aber “boolean isShow = false” in true ändern, um den App-Namen in der erweiterten Symbolleiste beim Aktivitätsstart zu entfernen.
– DH28
23. August 2016 um 15:13 Uhr
@Giuseppe: Es ist das gleiche. Getestet auf API 16 –> funktioniert
– Glücksritter
30. August 2016 um 11:34 Uhr
Dies hat bei mir nicht funktioniert, manchmal wird der Titel überhaupt nicht angezeigt, selbst wenn meine Protokolle eindeutig angeben, dass setTitle mit “Title” aufgerufen wurde.
– Benutzer1354603
15. Dezember 2016 um 12:35 Uhr
Danke, das funktioniert. Aber ich bekomme eine bessere Wirkung durch if (scrollRange + verticalOffset <120). Dies wird immer etwas Text in der Appbar statt einer leeren Appbar haben.
– Parag Kadam
25. Oktober 2017 um 7:52 Uhr
Ruben Sousa
Ich habe die Lösung von dlohani ausprobiert, mochte sie aber wegen des Ausblendens nicht. Mit dieser Lösung entfernen Sie das Verblassen vollständig.
Der Trick besteht darin, einen neuen Stil mit textSize gleich 0.1sp oder 0sp (dieser stürzt bei SDK < 19 ab) und textColor transparent zu erstellen:
Ok, wie immer ist dies eine weitere Lösung, die nicht für alle Geräte gleich funktioniert. Auf Kitkat scheint 0sp zu funktionieren, aber auf Jellybean bringt es die App zum Absturz. 0.1sp funktioniert auf Jellybean, macht aber den Text auf Kitkat wackelig 🙁
– Ruben Sousa
11. September 2015 um 18:12 Uhr
Wie können wir diese API-Level-Grenze für den Stil festlegen?
– Mahm00d
16. Januar 2016 um 6:12 Uhr
Sie müssen den Ordner „values-v19“ für SDK >= 19 und den Ordner „values“ für SDK < 19 verwenden. Sehen Sie sich dies als Referenz an: stackoverflow.com/questions/16624317/…
– Ruben Sousa
17. Januar 2016 um 2:49 Uhr
Dies funktioniert auf N, während die Lösung von @dlohani dies nicht tat
– Tyler Pfaff
1. September 2016 um 6:01 Uhr
Das Problem besteht weiterhin: Der Text wird immer noch allmählich ausgeblendet (was bedeutet, dass er jeden anderen angezeigten Text verdeckt), wenn die einklappende Symbolleiste eingeklappt ist.
– Richard
25. Mai 2020 um 4:53 Uhr
Ich konnte den gewünschten Effekt erzielen, indem ich dem XML-Layout die folgende Eigenschaft hinzufügte:
das ist awsome 🙂 Gibt es eine Möglichkeit für den Titel, sich eine Animation einfallen zu lassen?
– Lubos Mudrak
1. August 2015 um 17:39 Uhr
Das ist schrecklich, man sieht, wie es einsinkt, wenn es zusammenbricht. Vielmehr blendet es einfach in seiner endgültigen Position ein.
– CaptRisky
16. August 2015 um 6:08 Uhr
Dito, was CaptRisky gesagt hat. Leider finde ich keine Alternative 🙁
– kenyee
24. August 2015 um 17:17 Uhr
Dies funktioniert nur, wenn Sie die Android-API 22 oder niedriger verwenden. Für 23 oder höher funktioniert die Lösung nicht. Sie müssen die Lösung von @steven274 verwenden.
– Simon
27. Oktober 2015 um 14:18 Uhr
Es funktioniert noch besser auf Android API 23, als ich es versucht habe
– dlohani
30. Oktober 2015 um 8:48 Uhr
Shrini Jaishal
Ich habe eine einfachere Antwort:
final CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.toolbar_layout);
collapsingToolbarLayout.setTitle("Your Title");
collapsingToolbarLayout.setExpandedTitleColor(getResources().getColor(R.color.transperent)); // transperent color = #00000000
collapsingToolbarLayout.setCollapsedTitleTextColor(Color.rgb(0, 0, 0)); //Color of your title
Viel Spaß beim Codieren!
Hardik Dudhaiya
Dieser Code funktioniert für mich: Verwenden Sie color.parse color, denn wenn Ihre Hintergrundfarbe anders ist, ersetzen Sie sie durch Weiß und Ihr Titel wird nicht angezeigt
Oder Sie können für transparent verwenden collapsingToolbarLayout.setExpandedTitleColor(Color.TRANSPARENT);
Ich habe erfolgreich eine verblassende Textansicht hinzugefügt, füge einfach eine Textansicht in der Symbolleiste hinzu und setze ihr Alpha basierend auf dem VerticalOffset im Appbar-Callback
mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
mTitleTextView.setAlpha(Math.abs(verticalOffset / (float)
appBarLayout.getTotalScrollRange()));
}
});
Alex
Hier die einfachste und funktionierende Lösung auch mit API 23:
app:expandedTitleTextAppearance muss TextAppearance erben.
Fügen Sie also in Ihrer styles.xml diese Zeilen hinzu: