ढहने पर ही CollapsingToolbarLayout शीर्षक दिखाएं


145

मैंने कोशिश की है setExpandedTitleColorऔर setCollapsedTitleColor(पारदर्शी से और स्विचन) बिना किसी भाग्य के। मैं किसी भी तरीके से निर्मित नहीं देख सकता, जो मैं देख रहा हूँ वह करूँगा।

मैं केवल शीर्षक दिखाना चाहता हूं जब CollapsingToolbarLayout पूरी तरह से ढह गया है, अन्यथा, मुझे इसे छिपाने की आवश्यकता है।

कोई संकेत?

जवाबों:


285

आप यह निर्धारित OnOffsetChangedListenerकरने के AppBarLayoutलिए जोड़ सकते हैं कि कब CollapsingToolbarLayoutढह गई या विस्तारित हो गई और इसे शीर्षक दिया गया।

जावा

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
यह समाधान एपी 23 और इसके बाद के संस्करण के लिए काम करता है। यह सबसे सही उपाय है।
साइमन

कृपया इसे सही उत्तर के रूप में चिह्नित करें। @Dlohani का उत्तर जो वर्तमान में सही के रूप में चिह्नित है, पाठ को छिपाता नहीं है क्योंकि आप इसे संक्रमण देख सकते हैं।
विषय

9
इसने मेरे लिए काम किया, लेकिन गतिविधि शुरू होने पर विस्तारित टूलबार में ऐप का नाम हटाने के लिए "बूलियन ishow = गलत" को बदलना पड़ा।
15:28 पर डीएच

3
@Giuseppe: यह एक ही है। एपीआई 16 पर परीक्षण किया गया -> काम कर रहा है
भाग्यशाली

1
यह मेरे लिए काम नहीं करता था, कभी-कभी शीर्षक बिल्कुल भी दिखाई नहीं देता है, जब मेरे लॉग स्पष्ट रूप से बताते हैं कि सेट टाइटल को "शीर्षक" के साथ कहा जाता है
user1354603

47

मैं dlohani के समाधान की कोशिश की, लेकिन बाहर लुप्त होती की वजह से यह पसंद नहीं आया। इस समाधान के साथ, आप लुप्त होती को पूरी तरह से हटा देते हैं।

चाल को 0.1S या 0sp (एसडीके <19 पर एक क्रैश) और टेक्स्टकॉलर पारदर्शी के बराबर टेक्स्टस् के साथ एक नई शैली बनाने के लिए है:

एसडीके <19 के लिए

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

एसडीके के लिए = 19

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

फिर इसे अपने लेआउट में CollapsingToolbarLayout पर लागू करें:

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

ठीक है, हमेशा की तरह, यह एक और समाधान है जो सभी उपकरणों के लिए समान काम नहीं करता है। किटकैट पर 0sp काम करने लगता है, लेकिन जेलीबीन पर यह ऐप को क्रैश कर देता है। 0.1sp जेलीबीन पर काम करता है, लेकिन किटकैट पर पाठ को झकझोर देता है :(
रूबेन सोसा

हम शैली पर उस एपीआई स्तर की सीमा कैसे निर्धारित कर सकते हैं?
Mahm00d

आपको SDK> = 19 के लिए मानों- v19 फ़ोल्डर और SDK <19 के लिए मान फ़ोल्डर का उपयोग करने की आवश्यकता है। संदर्भ के लिए इस पर एक नज़र डालें: stackoverflow.com/questions/16624317/-
रूबेन सोसिन

1
यह एन पर काम करता है जबकि @dlohani से समाधान नहीं हुआ
टायलर Pfaff

1
यह सबसे सरल और सबसे अच्छा उपाय है। बहुत बहुत धन्यवाद।
विकाश पराजुली

38

मैं xml लेआउट में निम्नलिखित संपत्ति जोड़कर वांछित प्रभाव प्राप्त करने में सक्षम था:

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

इसलिए मेरा CollapsingToolbarLayout ऐसा दिखता है

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

यह awsome है :) वहाँ शीर्षक के लिए कोई मूत कुछ एनीमेशन के साथ आने के लिए है?
लुबोस मुद्रा

7
यह भयानक है, आप इसे इसके पतन के रूप में लुप्त होती देखते हैं। बल्कि यह सिर्फ अपनी अंतिम स्थिति में फीका है।
कैप्टिस्की

1
Ditto क्या CaptRisky ने कहा। दुर्भाग्य से, मुझे नहीं लगता कि कोई विकल्प है :-(
kenyee

9
यह काम तभी करेगा जब आप android api 22 या उससे नीचे का उपयोग कर रहे हों। 23 या उससे अधिक के लिए, समाधान काम नहीं करता है। आपको @ steven274 से समाधान का उपयोग करना होगा।
साइमन

1
यह एंड्रॉइड एपी 23 पर तब भी बेहतर काम कर रहा है जब मैंने कोशिश की थी
dlohani

24

मेरे पास एक अधिक सरल उत्तर है:

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

हैप्पी कोडिंग!


4
यह अन्य उत्तर में संदर्भित के रूप में समस्या में एक ही फीका का कारण बनता है।
विषयवस्तु

मैं केवल टूलबार शीर्षक रंग बदलना चाहता था और इसने मेरे साथ काम कियाmCollapsingToolbarLayout.setExpandedTitleColor(Color.argb(255,0,0,0))
कोसियारा - बार्टोज़ कोसार्ज़ी

@ बर्टोज़ कोसरज़ी, मैं mCollapsingToolbarLayout.setExpandedTitleColor (Color.argb (255,0,0,0)) के साथ अनलकी था; लेकिन mCollapsingToolbarLayout.setExpandedTitleColor (Reference.getources ()। getColor (android.R.color.transparent)); काम किया, लेकिन निश्चित रूप से आपके समाधान से निकलता है :)
ShayHaned

24

यह कोड मेरे लिए काम करता है: color.parse रंग का उपयोग करें क्योंकि यदि आपकी पृष्ठभूमि का रंग अलग है तो सफेद और आपके शीर्षक को प्रदर्शित न करें

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

या आप पारदर्शी के लिए उपयोग कर सकते हैं collapsingToolbarLayout.setExpandedTitleColor(Color.TRANSPARENT);


कोई अतिरिक्त श्रोता अपेक्षा के अनुरूप काम नहीं करता है!
मृत्युंजय कुमार

19

मैंने सफलतापूर्वक एक लुप्त होती टेक्स्टव्यू जोड़ी, बस टूलबार में एक टेक्स्ट व्यू जोड़ें, और यह ऐप्पल कॉलबैक में वर्टिकलऑफसेट के आधार पर अल्फा को सेट करना है।

mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {

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

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

फ्लोट रेंज = appBarLayout.getTotalScrollRange (); फ्लोट अल्फ़ा = Math.abs (वर्टिकलऑफ़सेट / रेंज); अगर (अल्फा> 0.8) {mToolbar.setAlpha (अल्फा); } और {mToolbar.setAlpha (.0f); }
qinmiao

13

यहाँ 23 के साथ सबसे सरल और काम करने वाला समाधान भी है:

app: ExtendedTitleTextAppearance को TextAppearance विरासत में मिली है।

तो, अपनी शैलियों में। Xml इस पंक्तियों को जोड़ें:

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

फिर, अपने CollapsingToolbarLayout में, इस पंक्ति को जोड़ें।

app:expandedTitleTextAppearance="@style/TransparentText"

बस आज के लिए इतना ही!


5

नीचे का समाधान पूरी तरह से काम करता है।

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

यहाँ मेरा समाधान है:

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

मेरे उत्पीड़न में थोड़ा और सुरुचिपूर्ण समाधान कुछ इस तरह होगा।

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

}

और उपयोग कुछ इस तरह दिखेगा

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

पाठ को केवल दिखाने या छिपाने के बजाय बाहर फीका करने की भी संभावना है।


2

यह मेरे लिए काम करता है।

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

यह कोटलिन संस्करण है जो मेरे लिए काम करता है:

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

बस इस कोड को जोड़ें:

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

collapsingToolbarLayout.setExpandedTitleColor(ContextCompat.getColor(this , android.R.color.transparent));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.