Tampilkan judul CollapsingToolbarLayout hanya ketika diciutkan


145

Saya sudah mencoba setExpandedTitleColordan setCollapsedTitleColor(beralih ke dan dari transparan) tanpa hasil. Saya tidak dapat melihat metode bawaan apa pun yang akan melakukan apa yang saya cari.

Saya hanya ingin menunjukkan judul ketika CollapsingToolbarLayout sepenuhnya runtuh, jika tidak, saya perlu disembunyikan.

Ada petunjuk?

Jawaban:


285

Anda dapat menambahkan OnOffsetChangedListenerke AppBarLayoutuntuk menentukan kapan CollapsingToolbarLayoutdiciutkan atau diperluas dan atur judulnya.

Jawa

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

1
Solusi ini berfungsi untuk api 23 ke atas. Ini adalah solusi yang paling benar.
Simon

Tandai ini sebagai jawaban yang benar. Jawaban dari @dlohani yang saat ini ditandai sebagai benar tidak menyembunyikan teks karena Anda dapat melihatnya transisi.
themichaelscott

9
Itu bekerja untuk saya, tetapi harus mengubah "boolean isShow = false" menjadi true untuk menghapus nama aplikasi di bilah alat yang diperluas saat aktivitas dimulai.
DH28

3
@ Giuseppe: sama saja. Diuji pada API 16 -> working
luckyhandler

1
Ini tidak berhasil untuk saya, kadang-kadang judul tidak muncul sama sekali bahkan ketika log saya dengan jelas menyatakan bahwa setTitle dipanggil dengan "Judul"
user1354603

47

Saya mencoba solusi dlohani, tetapi tidak suka karena fading out. Dengan solusi ini, Anda menghapus fading sepenuhnya.

Caranya adalah membuat gaya baru dengan textSize sama dengan 0,1sp atau 0sp (yang ini mogok di SDK <19) dan textColor transparan:

Untuk SDK <19

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

Untuk SDK> = 19

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

Kemudian menerapkannya ke CollapsingToolbarLayout di tata letak Anda:

    <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, seperti biasa, ini adalah solusi lain yang tidak berfungsi sama untuk semua perangkat. Pada Kitkat 0sp tampaknya berfungsi, tetapi pada Jellybean membuat aplikasi mogok. 0.1sp bekerja pada Jellybean tetapi membuat teks goyah di Kitkat :(
Rúben Sousa

Bagaimana kita bisa menetapkan batas level api pada style?
Mahm00d

Anda perlu menggunakan folder values-v19 untuk SDK> = 19 dan folder nilai untuk SDK <19. Lihatlah ini sebagai referensi: stackoverflow.com/questions/16624317/…
Rúben Sousa

1
Ini bekerja pada N sedangkan solusi dari @dlohani tidak
Tyler Pfaff

1
Ini adalah solusi paling sederhana dan terbaik. Terima kasih banyak.
Vikash Parajuli

38

Saya bisa mendapatkan efek yang diinginkan dengan menambahkan properti berikut ke tata letak xml:

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

jadi CollapsingToolbarLayout saya terlihat seperti ini

<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">

ini luar biasa :) adakah judul untuk beberapa animasi?
Lubos Mudrak

7
Ini mengerikan, Anda melihatnya memudar saat runtuh. Sebaliknya itu hanya memudar di posisi terakhirnya.
CaptRisky

1
Lakukan apa yang dikatakan CaptRisky. Sayangnya, saya tidak berpikir ada alternatif :-(
kenyee

9
Ini hanya akan berfungsi jika Anda menggunakan api android 22 atau lebih rendah. Untuk 23 atau lebih, solusinya tidak berfungsi. Anda harus menggunakan solusi dari @ steven274.
Simon

1
Ini bekerja lebih baik saat di android api 23 ketika saya mencoba
dlohani

24

Saya punya jawaban yang lebih sederhana:

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

Selamat Coding!


4
Ini menyebabkan pudar yang sama dalam masalah seperti yang dirujuk dalam jawaban lain.
themichaelscott

Saya hanya ingin mengubah warna judul Toolbar dan itu berhasil bagi saya denganmCollapsingToolbarLayout.setExpandedTitleColor(Color.argb(255,0,0,0))
kosiara - Bartosz Kosarzycki

@ Bartosz Kosarzycki, saya tidak beruntung dengan mCollapsingToolbarLayout.setExpandedTitleColor (Color.argb (255.0.0.0)); tetapi mCollapsingToolbarLayout.setExpandedTitleColor (context.getResources (). getColor (android.R.color.transparent)); melakukan pekerjaan itu, tetapi tentu saja berasal dari solusi Anda :)
ShayHaned

24

Kode ini berfungsi untuk saya: Gunakan warna color.parse karena jika warna latar belakang Anda berbeda maka ganti dengan putih dan judul Anda tidak ditampilkan

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

Atau bisa Anda gunakan untuk transparan collapsingToolbarLayout.setExpandedTitleColor(Color.TRANSPARENT);


Tidak ada pendengar tambahan yang bekerja seperti yang diharapkan!
Mrityunjay Kumar

19

Saya berhasil menambahkan tampilan teks memudar, cukup tambahkan tampilan teks di toolbar, dan pengaturan alpha berdasarkan pada verticalOffset di appbar callback

mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {

        @Override
        public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {

            mTitleTextView.setAlpha(Math.abs(verticalOffset / (float)
                    appBarLayout.getTotalScrollRange()));
        }
    });

float range = appBarLayout.getTotalScrollRange (); float alpha = Math.abs (verticalOffset / range); if (alpha> 0.8) {mToolbar.setAlpha (alpha); } else {mToolbar.setAlpha (.0f); }
qinmiao

13

Di sini solusi paling sederhana dan berfungsi juga dengan api 23:

app: extendedTitleTextAppearance harus mewarisi TextAppearance.

Jadi, di styles.xml Anda tambahkan baris ini:

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

Kemudian, di CollapsingToolbarLayout Anda, tambahkan baris ini.

app:expandedTitleTextAppearance="@style/TransparentText"

Itu semua orang!


5

Solusi di bawah ini berfungsi dengan sempurna.

appbar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
                @Override
                public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
                    if (Math.abs(verticalOffset)-appBarLayout.getTotalScrollRange() == 0)
                    {
                        // Collapsed
                        setTitle("Title To Show");
                    }
                    else
                    {
                        // Expanded
                        setTitle("");
                    }
                }
            });

4

Ini solusinya:

collapsingToolbar.setCollapsedTitleTextAppearance(R.style.personal_collapsed_title);
collapsingToolbar.setExpandedTitleTextAppearance(R.style.personal_expanded_title);

<style name="personal_collapsed_title">
     <item name="android:textSize">18sp</item>
     <item name="android:textColor">@color/black</item>
</style>

<style name="personal_expanded_title">
     <item name="android:textSize">0sp</item>
</style>

2

Menurut pendapat saya solusi yang sedikit lebih elegan akan menjadi seperti ini.

public class MyCollapsingToolbarLayout extends CollapsingToolbarLayout {

    private final int toolbarId;
    @Nullable private Toolbar toolbar;

    public MyCollapsingToolbarLayout(Context context, AttributeSet attrs) {
        super(context, attrs);

        setTitleEnabled(false);

        TypedArray a = context.obtainStyledAttributes(attrs,
                R.styleable.CollapsingToolbarLayout, 0,
                R.style.Widget_Design_CollapsingToolbar);

        toolbarId = a.getResourceId(android.support.design.R.styleable.CollapsingToolbarLayout_toolbarId, -1);

        a.recycle();

    }

    @Override public void setScrimsShown(boolean shown, boolean animate) {
        super.setScrimsShown(shown, animate);

        findToolbar();
        if (toolbar != null) {
            toolbar.setTitleTextColor(shown ? Color.WHITE : Color.TRANSPARENT);
        }
    }

    private void findToolbar() {
        if (toolbar == null) {
            toolbar = (Toolbar) findViewById(toolbarId);
        }
    }

}

Dan penggunaannya akan terlihat seperti ini

<butter.droid.widget.BurtterCollapsingToolbarLayout
        app:toolbarId="@+id/toolbar"
        ...>

Ada juga kemungkinan untuk memudar / dalam teks, bukan hanya menunjukkan atau menyembunyikannya.


2

Ini bekerja untuk saya.

final Toolbar tool = (Toolbar)findViewById(R.id.toolbar);
CollapsingToolbarLayout c = (CollapsingToolbarLayout)findViewById(R.id.collapsing_toolbar);
AppBarLayout appbar = (AppBarLayout)findViewById(R.id.app_bar_layout);
tool.setTitle("");
setSupportActionBar(tool);
c.setTitleEnabled(false);

appbar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
    boolean isVisible = true;
    int scrollRange = -1;
    @Override
    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
        if (scrollRange == -1) {
            scrollRange = appBarLayout.getTotalScrollRange();
        }
        if (scrollRange + verticalOffset == 0) {
           tool.setTitle("Title");
            isVisible = true;
        } else if(isVisible) {
            tool.setTitle("");
            isVisible = false;
        }
    }
});

0

Ini adalah versi kotlin yang berfungsi untuk saya:

appbar.addOnOffsetChangedListener(object : OnOffsetChangedListener {
                var isShow = true
                var scrollRange = -1
                override fun onOffsetChanged(appBarLayout: AppBarLayout, verticalOffset: Int) {
                    if (scrollRange == -1) scrollRange = appBarLayout.totalScrollRange

                    if (scrollRange + verticalOffset == 0) {
                        toolbarLayout.title = "Title"
                        isShow = true
                    } else if (isShow) {
                        toolbarLayout.title = " " //These quote " " with _ space is intended 
                        isShow = false
                    }
                }
            })

0

tambahkan saja kode ini:

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

collapsingToolbarLayout.setExpandedTitleColor(ContextCompat.getColor(this , android.R.color.transparent));
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.