CollapsingToolbarLayout-Titel nur im reduzierten Zustand anzeigen

Lesezeit: 5 Minuten

Benutzer-Avatar
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?

Benutzer-Avatar
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

Benutzer-Avatar
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:

Für SDK < 19

<style name="CollapsingToolbarLayoutExpandedTextStyle" parent="AppTheme">
    <item name="android:textColor">@android:color/transparent</item>
    <item name="android:textSize">0.1sp</item>
</style>

Für SDK >= 19

<style name="CollapsingToolbarLayoutExpandedTextStyle" parent="AppTheme">
    <item name="android:textColor">@android:color/transparent</item>
    <item name="android:textSize">0sp</item>
</style>

Wenden Sie es dann auf das CollapsingToolbarLayout in Ihrem Layout an:

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:expandedTitleTextAppearance="@style/CollapsingToolbarLayoutExpandedTextStyle"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

  • 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:

app:expandedTitleTextAppearance="@android:color/transparent"

mein CollapsingToolbarLayout sieht also so aus

<android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsingToolbarLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:expandedTitleTextAppearance="@android:color/transparent"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

  • 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

Benutzer-Avatar
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!

Benutzer-Avatar
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

collapsingToolbarLayout.setExpandedTitleColor(Color.parseColor("#00FFFFFF"));

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()));
        }
    });

Benutzer-Avatar
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:

<style name="TransparentText" parent="@android:style/TextAppearance">
   <item name="android:textColor">#00000000</item>
</style>

Fügen Sie dann in Ihrem CollapsingToolbarLayout diese Zeile hinzu.

app:expandedTitleTextAppearance="@style/TransparentText"

Das war’s Leute!

1344170cookie-checkCollapsingToolbarLayout-Titel nur im reduzierten Zustand anzeigen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy